Showing preview only (3,427K chars total). Download the full file or copy to clipboard to get everything.
Repository: iwanalabs/django-htmx-components
Branch: main
Commit: c613a55a7484
Files: 428
Total size: 3.2 MB
Directory structure:
gitextract_kg9gks1i/
├── .gitignore
├── LICENSE
├── Makefile
├── README.md
├── package.json
├── pyproject.toml
├── src/
│ ├── app/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── management/
│ │ │ └── commands/
│ │ │ ├── clear_cache.py
│ │ │ └── regenerate_data.py
│ │ ├── migrations/
│ │ │ ├── 0001_initial.py
│ │ │ ├── 0002_init_data.py
│ │ │ ├── 0003_sitemap.py
│ │ │ └── __init__.py
│ │ ├── models.py
│ │ ├── sitemap.py
│ │ ├── tests.py
│ │ ├── urls.py
│ │ ├── utils.py
│ │ └── views.py
│ ├── components/
│ │ ├── __init__.py
│ │ ├── active_search/
│ │ │ ├── input.py
│ │ │ ├── tbody.py
│ │ │ └── urls.py
│ │ ├── bulk_update/
│ │ │ ├── table.py
│ │ │ ├── tbody.py
│ │ │ └── urls.py
│ │ ├── cascading_selects/
│ │ │ ├── parent_select.py
│ │ │ ├── select.py
│ │ │ └── urls.py
│ │ ├── click_to_edit.py
│ │ ├── click_to_load/
│ │ │ ├── table.py
│ │ │ ├── tbody.py
│ │ │ └── urls.py
│ │ ├── component_tabs/
│ │ │ ├── component_tabs.css
│ │ │ ├── component_tabs.html
│ │ │ ├── component_tabs.js
│ │ │ └── component_tabs.py
│ │ ├── delete_row.py
│ │ ├── edit_row/
│ │ │ ├── row.py
│ │ │ ├── table.py
│ │ │ └── urls.py
│ │ ├── infinite_scroll/
│ │ │ ├── table.py
│ │ │ ├── tbody.py
│ │ │ └── urls.py
│ │ ├── inline_validation/
│ │ │ ├── form.py
│ │ │ ├── forms.py
│ │ │ ├── input.py
│ │ │ └── urls.py
│ │ ├── progress_bar/
│ │ │ ├── bar.py
│ │ │ ├── start.py
│ │ │ ├── status.py
│ │ │ └── urls.py
│ │ └── urls.py
│ ├── config/
│ │ ├── __init__.py
│ │ ├── asgi.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── manage.py
│ ├── static/
│ │ ├── input/
│ │ │ └── style.css
│ │ └── output/
│ │ ├── preload.js
│ │ ├── prism.css
│ │ ├── prism.js
│ │ ├── sse.js
│ │ ├── style.css
│ │ └── ws.js
│ ├── staticfiles/
│ │ ├── __init__.d41d8cd98f00.py
│ │ ├── __init__.py
│ │ ├── _base.51249b9b3e6d.html
│ │ ├── _base.9d44d0a966ee.html
│ │ ├── _base.f222f8408fbe.html
│ │ ├── _base.html
│ │ ├── active_search/
│ │ │ ├── input.0d7f732a97de.py
│ │ │ ├── input.py
│ │ │ ├── tbody.46fe860010d3.py
│ │ │ ├── tbody.py
│ │ │ ├── urls.69d1718169f9.py
│ │ │ └── urls.py
│ │ ├── active_search.78bab46ab4f3.html
│ │ ├── active_search.78decbf8ff19.html
│ │ ├── active_search.html
│ │ ├── admin/
│ │ │ ├── css/
│ │ │ │ ├── autocomplete.4a81fc4242d0.css
│ │ │ │ ├── autocomplete.css
│ │ │ │ ├── base.6be58084bde8.css
│ │ │ │ ├── base.9f65b5cd54b3.css
│ │ │ │ ├── base.css
│ │ │ │ ├── changelists.47cb433b29d4.css
│ │ │ │ ├── changelists.css
│ │ │ │ ├── dark_mode.css
│ │ │ │ ├── dark_mode.e18e9a052429.css
│ │ │ │ ├── dashboard.css
│ │ │ │ ├── dashboard.e90f2068217b.css
│ │ │ │ ├── forms.b29a0c8c9155.css
│ │ │ │ ├── forms.css
│ │ │ │ ├── login.586129c60a93.css
│ │ │ │ ├── login.css
│ │ │ │ ├── nav_sidebar.css
│ │ │ │ ├── nav_sidebar.dd925738f4cc.css
│ │ │ │ ├── responsive.css
│ │ │ │ ├── responsive.eafb93ff084c.css
│ │ │ │ ├── responsive_rtl.7d1130848605.css
│ │ │ │ ├── responsive_rtl.css
│ │ │ │ ├── rtl.aa92d763340b.css
│ │ │ │ ├── rtl.css
│ │ │ │ ├── vendor/
│ │ │ │ │ └── select2/
│ │ │ │ │ ├── LICENSE-SELECT2.f94142512c91.md
│ │ │ │ │ ├── LICENSE-SELECT2.md
│ │ │ │ │ ├── select2.a2194c262648.css
│ │ │ │ │ ├── select2.css
│ │ │ │ │ └── select2.min.9f54e6414f87.css
│ │ │ │ ├── widgets.8a70ea6d8850.css
│ │ │ │ └── widgets.css
│ │ │ ├── img/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── LICENSE.2c54f4e1ca1c
│ │ │ │ ├── README.a70711a38d87.txt
│ │ │ │ └── README.txt
│ │ │ └── js/
│ │ │ ├── SelectBox.7d3ce5a98007.js
│ │ │ ├── SelectBox.js
│ │ │ ├── SelectFilter2.b8cf7343ff9e.js
│ │ │ ├── SelectFilter2.js
│ │ │ ├── actions.867b023a736d.js
│ │ │ ├── actions.js
│ │ │ ├── admin/
│ │ │ │ ├── DateTimeShortcuts.9f6e209cebca.js
│ │ │ │ ├── DateTimeShortcuts.js
│ │ │ │ ├── RelatedObjectLookups.ef211845e458.js
│ │ │ │ └── RelatedObjectLookups.js
│ │ │ ├── autocomplete.01591ab27be7.js
│ │ │ ├── autocomplete.js
│ │ │ ├── calendar.d64496bbf46d.js
│ │ │ ├── calendar.js
│ │ │ ├── cancel.ecc4c5ca7b32.js
│ │ │ ├── cancel.js
│ │ │ ├── change_form.9d8ca4f96b75.js
│ │ │ ├── change_form.js
│ │ │ ├── collapse.f84e7410290f.js
│ │ │ ├── collapse.js
│ │ │ ├── core.7e257fdf56dc.js
│ │ │ ├── core.js
│ │ │ ├── filters.0e360b7a9f80.js
│ │ │ ├── filters.js
│ │ │ ├── inlines.22d4d93c00b4.js
│ │ │ ├── inlines.js
│ │ │ ├── jquery.init.b7781a0897fc.js
│ │ │ ├── jquery.init.js
│ │ │ ├── nav_sidebar.3b9190d420b1.js
│ │ │ ├── nav_sidebar.js
│ │ │ ├── popup_response.c6cc78ea5551.js
│ │ │ ├── popup_response.js
│ │ │ ├── prepopulate.bd2361dfd64d.js
│ │ │ ├── prepopulate.js
│ │ │ ├── prepopulate_init.6cac7f3105b8.js
│ │ │ ├── prepopulate_init.js
│ │ │ ├── theme.ab270f56bb9c.js
│ │ │ ├── theme.js
│ │ │ ├── urlify.ae970a820212.js
│ │ │ ├── urlify.js
│ │ │ └── vendor/
│ │ │ ├── jquery/
│ │ │ │ ├── LICENSE.de877aa6d744.txt
│ │ │ │ ├── LICENSE.txt
│ │ │ │ ├── jquery.12e87d2f3a4c.js
│ │ │ │ ├── jquery.js
│ │ │ │ └── jquery.min.2c872dbe60f4.js
│ │ │ ├── select2/
│ │ │ │ ├── LICENSE.f94142512c91.md
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── i18n/
│ │ │ │ │ ├── af.4f6fcd73488c.js
│ │ │ │ │ ├── af.js
│ │ │ │ │ ├── ar.65aa8e36bf5d.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── az.270c257daf81.js
│ │ │ │ │ ├── az.js
│ │ │ │ │ ├── bg.39b8be30d4f0.js
│ │ │ │ │ ├── bg.js
│ │ │ │ │ ├── bn.6d42b4dd5665.js
│ │ │ │ │ ├── bn.js
│ │ │ │ │ ├── bs.91624382358e.js
│ │ │ │ │ ├── bs.js
│ │ │ │ │ ├── ca.a166b745933a.js
│ │ │ │ │ ├── ca.js
│ │ │ │ │ ├── cs.4f43e8e7d33a.js
│ │ │ │ │ ├── cs.js
│ │ │ │ │ ├── da.766346afe4dd.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── de.8a1c222b0204.js
│ │ │ │ │ ├── de.js
│ │ │ │ │ ├── dsb.56372c92d2f1.js
│ │ │ │ │ ├── dsb.js
│ │ │ │ │ ├── el.27097f071856.js
│ │ │ │ │ ├── el.js
│ │ │ │ │ ├── en.cf932ba09a98.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── es.66dbc2652fb1.js
│ │ │ │ │ ├── es.js
│ │ │ │ │ ├── et.2b96fd98289d.js
│ │ │ │ │ ├── et.js
│ │ │ │ │ ├── eu.adfe5c97b72c.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── fa.3b5bd1961cfd.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── fi.614ec42aa9ba.js
│ │ │ │ │ ├── fi.js
│ │ │ │ │ ├── fr.05e0542fcfe6.js
│ │ │ │ │ ├── fr.js
│ │ │ │ │ ├── gl.d99b1fedaa86.js
│ │ │ │ │ ├── gl.js
│ │ │ │ │ ├── he.e420ff6cd3ed.js
│ │ │ │ │ ├── he.js
│ │ │ │ │ ├── hi.70640d41628f.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── hr.a2b092cc1147.js
│ │ │ │ │ ├── hr.js
│ │ │ │ │ ├── hsb.fa3b55265efe.js
│ │ │ │ │ ├── hsb.js
│ │ │ │ │ ├── hu.6ec6039cb8a3.js
│ │ │ │ │ ├── hu.js
│ │ │ │ │ ├── hy.c7babaeef5a6.js
│ │ │ │ │ ├── hy.js
│ │ │ │ │ ├── id.04debded514d.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── is.3ddd9a6a97e9.js
│ │ │ │ │ ├── is.js
│ │ │ │ │ ├── it.be4fe8d365b5.js
│ │ │ │ │ ├── it.js
│ │ │ │ │ ├── ja.170ae885d74f.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── ka.2083264a54f0.js
│ │ │ │ │ ├── ka.js
│ │ │ │ │ ├── km.c23089cb06ca.js
│ │ │ │ │ ├── km.js
│ │ │ │ │ ├── ko.e7be6c20e673.js
│ │ │ │ │ ├── ko.js
│ │ │ │ │ ├── lt.23c7ce903300.js
│ │ │ │ │ ├── lt.js
│ │ │ │ │ ├── lv.08e62128eac1.js
│ │ │ │ │ ├── lv.js
│ │ │ │ │ ├── mk.dabbb9087130.js
│ │ │ │ │ ├── mk.js
│ │ │ │ │ ├── ms.4ba82c9a51ce.js
│ │ │ │ │ ├── ms.js
│ │ │ │ │ ├── nb.da2fce143f27.js
│ │ │ │ │ ├── nb.js
│ │ │ │ │ ├── ne.3d79fd3f08db.js
│ │ │ │ │ ├── ne.js
│ │ │ │ │ ├── nl.997868a37ed8.js
│ │ │ │ │ ├── nl.js
│ │ │ │ │ ├── pl.6031b4f16452.js
│ │ │ │ │ ├── pl.js
│ │ │ │ │ ├── ps.38dfa47af9e0.js
│ │ │ │ │ ├── ps.js
│ │ │ │ │ ├── pt-BR.e1b294433e7f.js
│ │ │ │ │ ├── pt-BR.js
│ │ │ │ │ ├── pt.33b4a3b44d43.js
│ │ │ │ │ ├── pt.js
│ │ │ │ │ ├── ro.f75cb460ec3b.js
│ │ │ │ │ ├── ro.js
│ │ │ │ │ ├── ru.934aa95f5b5f.js
│ │ │ │ │ ├── ru.js
│ │ │ │ │ ├── sk.33d02cef8d11.js
│ │ │ │ │ ├── sk.js
│ │ │ │ │ ├── sl.131a78bc0752.js
│ │ │ │ │ ├── sl.js
│ │ │ │ │ ├── sq.5636b60d29c9.js
│ │ │ │ │ ├── sq.js
│ │ │ │ │ ├── sr-Cyrl.f254bb8c4c7c.js
│ │ │ │ │ ├── sr-Cyrl.js
│ │ │ │ │ ├── sr.5ed85a48f483.js
│ │ │ │ │ ├── sr.js
│ │ │ │ │ ├── sv.7a9c2f71e777.js
│ │ │ │ │ ├── sv.js
│ │ │ │ │ ├── th.f38c20b0221b.js
│ │ │ │ │ ├── th.js
│ │ │ │ │ ├── tk.7c572a68c78f.js
│ │ │ │ │ ├── tk.js
│ │ │ │ │ ├── tr.b5a0643d1545.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ ├── uk.8cede7f4803c.js
│ │ │ │ │ ├── uk.js
│ │ │ │ │ ├── vi.097a5b75b3e1.js
│ │ │ │ │ ├── vi.js
│ │ │ │ │ ├── zh-CN.2cff662ec5f9.js
│ │ │ │ │ ├── zh-CN.js
│ │ │ │ │ ├── zh-TW.04554a227c2b.js
│ │ │ │ │ └── zh-TW.js
│ │ │ │ ├── select2.full.c2afdeda3058.js
│ │ │ │ ├── select2.full.js
│ │ │ │ └── select2.full.min.fcd7500d8e13.js
│ │ │ └── xregexp/
│ │ │ ├── LICENSE.b6fd2ceea8d3.txt
│ │ │ ├── LICENSE.txt
│ │ │ ├── xregexp.a7e08b0ce686.js
│ │ │ ├── xregexp.js
│ │ │ └── xregexp.min.f1ae4617847c.js
│ │ ├── bulk_update/
│ │ │ ├── table.19dbdd92634b.py
│ │ │ ├── table.ece66eda3489.py
│ │ │ ├── table.py
│ │ │ ├── tbody.0b798d7e4a5e.py
│ │ │ ├── tbody.py
│ │ │ ├── urls.4e760d1714af.py
│ │ │ └── urls.py
│ │ ├── bulk_update.09b471a09100.html
│ │ ├── bulk_update.3010cd02c183.html
│ │ ├── bulk_update.html
│ │ ├── cascading_selects/
│ │ │ ├── parent_select.663100c7b50f.py
│ │ │ ├── parent_select.ffa4c4dbe794.py
│ │ │ ├── parent_select.py
│ │ │ ├── select.158aa777d411.py
│ │ │ ├── select.py
│ │ │ ├── urls.cf66c75263f5.py
│ │ │ └── urls.py
│ │ ├── cascading_selects.3f302e32ce84.html
│ │ ├── cascading_selects.6609b643d2c7.html
│ │ ├── cascading_selects.html
│ │ ├── click_to_edit.2527ba5d7858.py
│ │ ├── click_to_edit.38f8beda892c.html
│ │ ├── click_to_edit.6c67df9f7cb4.html
│ │ ├── click_to_edit.8084c1fdc479.html
│ │ ├── click_to_edit.e860a5aa4d24.py
│ │ ├── click_to_edit.html
│ │ ├── click_to_edit.py
│ │ ├── click_to_load/
│ │ │ ├── table.0b1bb8bf7c91.py
│ │ │ ├── table.7b9417c3d2ed.py
│ │ │ ├── table.py
│ │ │ ├── tbody.b43c2a210a14.py
│ │ │ ├── tbody.e59bf7e3e1be.py
│ │ │ ├── tbody.py
│ │ │ ├── urls.b6ab5fb54fd4.py
│ │ │ └── urls.py
│ │ ├── click_to_load.10c9b98d47d9.html
│ │ ├── click_to_load.5b3914747c41.html
│ │ ├── click_to_load.html
│ │ ├── component_tabs/
│ │ │ ├── component_tabs.00b940293d23.html
│ │ │ ├── component_tabs.25ef95b81a22.py
│ │ │ ├── component_tabs.28d0d597d814.html
│ │ │ ├── component_tabs.4c76e3fe56f0.css
│ │ │ ├── component_tabs.689c07ee933a.js
│ │ │ ├── component_tabs.css
│ │ │ ├── component_tabs.f3bd68dc790a.js
│ │ │ ├── component_tabs.html
│ │ │ ├── component_tabs.js
│ │ │ └── component_tabs.py
│ │ ├── delete_row.08dbca324200.py
│ │ ├── delete_row.3d715f1d83c7.html
│ │ ├── delete_row.65b5c6777191.html
│ │ ├── delete_row.html
│ │ ├── delete_row.py
│ │ ├── django-htmx.b395a6831ba0.js
│ │ ├── django-htmx.js
│ │ ├── edit_row/
│ │ │ ├── row.101ee2e30322.py
│ │ │ ├── row.py
│ │ │ ├── table.49d751742877.py
│ │ │ ├── table.b2e07e31fe0d.py
│ │ │ ├── table.py
│ │ │ ├── urls.afbd9697c969.py
│ │ │ └── urls.py
│ │ ├── edit_row.f0b2badf8c40.html
│ │ ├── edit_row.fb217a7059d4.html
│ │ ├── edit_row.html
│ │ ├── flowbite.min.7c2b54dea4b1.js
│ │ ├── htmx.min.23806a07aa01.js
│ │ ├── index.330ffa9733ef.html
│ │ ├── index.3b13d7de4566.html
│ │ ├── index.c8db3aff394f.html
│ │ ├── index.html
│ │ ├── infinite_scroll/
│ │ │ ├── table.624e6ab16a01.py
│ │ │ ├── table.c757f118a80a.py
│ │ │ ├── table.py
│ │ │ ├── tbody.02a65ee11b28.py
│ │ │ ├── tbody.889ea8380c38.py
│ │ │ ├── tbody.bbb8483b7598.py
│ │ │ ├── tbody.py
│ │ │ ├── urls.2119b85fae27.py
│ │ │ └── urls.py
│ │ ├── infinite_scroll.2911a76df6e3.html
│ │ ├── infinite_scroll.557f08f53b4d.html
│ │ ├── infinite_scroll.html
│ │ ├── inline_validation/
│ │ │ ├── form.17ae9d61f48e.py
│ │ │ ├── form.py
│ │ │ ├── forms.fdf8f5825f8b.py
│ │ │ ├── forms.py
│ │ │ ├── input.1fc6025d3995.py
│ │ │ ├── input.py
│ │ │ ├── urls.1c76c74c8dfb.py
│ │ │ └── urls.py
│ │ ├── inline_validation.17ef819302a3.html
│ │ ├── inline_validation.180c06390895.html
│ │ ├── inline_validation.html
│ │ ├── preload.738a4657614c.js
│ │ ├── preload.js
│ │ ├── prism.1598ec91cbbd.css
│ │ ├── prism.167e3bcdc317.js
│ │ ├── prism.css
│ │ ├── prism.js
│ │ ├── progress_bar/
│ │ │ ├── bar.b8a3e8689aaa.py
│ │ │ ├── bar.py
│ │ │ ├── start.a6c80516bd2f.py
│ │ │ ├── start.py
│ │ │ ├── status.11892046b39b.py
│ │ │ ├── status.6f3dc147a08a.py
│ │ │ ├── status.8ddef869643a.py
│ │ │ ├── status.py
│ │ │ ├── urls.d84e7c811b76.py
│ │ │ └── urls.py
│ │ ├── progress_bar.a39ec01f4c8b.html
│ │ ├── progress_bar.c363aeb6fcab.html
│ │ ├── progress_bar.html
│ │ ├── sse.d41d8cd98f00.js
│ │ ├── sse.js
│ │ ├── staticfiles.json
│ │ ├── style.8907c8ae0e4d.css
│ │ ├── style.a787112a42a1.css
│ │ ├── style.b924d806fdc9.css
│ │ ├── style.css
│ │ ├── urls.ed747cf49aae.py
│ │ ├── urls.py
│ │ ├── ws.d96b2cd51173.js
│ │ └── ws.js
│ └── templates/
│ ├── __init__.py
│ ├── _base.html
│ ├── active_search.html
│ ├── bulk_update.html
│ ├── cascading_selects.html
│ ├── click_to_edit.html
│ ├── click_to_load.html
│ ├── delete_row.html
│ ├── edit_row.html
│ ├── index.html
│ ├── infinite_scroll.html
│ ├── inline_validation.html
│ └── progress_bar.html
└── tailwind.config.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
node_modules/
.DS_Store
db.sqlite3-shm
db.sqlite3-wal
tmp/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2022 Matt Butterfield
Copyright (c) 2024 Iwana Labs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: Makefile
================================================
PROJECT_DIR=$(shell pwd)
SRC_DIR=$(PROJECT_DIR)/src
INPUT_DIR=$(PROJECT_DIR)/src/static/input
OUTPUT_DIR=$(PROJECT_DIR)/src/static/output
run:
cd ${SRC_DIR} && poetry run python manage.py runserver 8000
generate-key:
poetry run python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
migrate:
cd ${SRC_DIR} && poetry run python manage.py makemigrations && poetry run python manage.py migrate
tailwind:
npx tailwindcss -i $(INPUT_DIR)/style.css -o $(OUTPUT_DIR)/style.css --watch -c tailwind.config.js --minify
collectstatic:
cd ${SRC_DIR} && poetry run python manage.py collectstatic
redis:
docker run --rm --name redis-server -p 6379:6379 -v ${PROJECT_DIR}/tmp:/data redis
clear-cache:
cd $(SRC_DIR) && poetry run python manage.py clear_cache
================================================
FILE: README.md
================================================
# Django HTMX Components
This is a collection of components for [Django](https://www.djangoproject.com/) and [htmx](https://htmx.org/). They are meant to be copy-pasted into your project and customized to your needs.
They're designed to be as simple as possible, so you can easily understand how they work and modify them to your needs. They have very little styling, for the same reason.
## Installation
1. Install [Django](https://www.djangoproject.com/) and [htmx](https://htmx.org/).
2. Install and set up [django-components](https://github.com/EmilStenstrom/django-components)
3. Create a `urls.py` file in `components/` and add the following code:
```python
from django.urls import path
urlpatterns = []
```
Then import this file in your project's `urls.py` file:
```python
from django.urls import path, include
urlpatterns = [
path('components/', include('components.urls')),
]
```
This step simplifies adding URL patterns for your components and keeps them separate from your project's URL patterns. Then, adding a single-file component to your `components/urls.py` file is as easy as:
```python
from django.urls import path
from components.mycomponent import MyComponent
urlpatterns = [
path('mycomponent/', MyComponent.as_view()),
]
```
It will handle requests to `/components/mycomponent/` and render the component.
4. Copy-paste the components you want to use into your `components/` folder. Add them to your `components/urls.py` file as described above.
## Contributing
Contributions are welcome! Please open an issue or pull request if you have a component you'd like to add or a bug to report.
### Local development
1. Clone this repository.
2. Create a virtual environment and install the dependencies:
```bash
poetry install
npm install
```
3. Run the Tailwind CSS build:
```bash
make tailwind
```
4. Start redis:
```bash
make redis
```
5. Run the development server:
```bash
make run
```
6. Open http://localhost:8000/ in your browser.
7. Make your changes and test them in your browser.
8. Commit your changes and open a pull request.
## License
This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.
================================================
FILE: package.json
================================================
{
"devDependencies": {
"@tailwindcss/typography": "^0.5.10",
"flowbite-typography": "^1.0.3",
"tailwindcss": "^3.4.1"
},
"dependencies": {
"flowbite": "^2.2.1"
}
}
================================================
FILE: pyproject.toml
================================================
[tool.poetry]
name = "django_htmx_components"
version = "0.1.0"
description = ""
authors = ["Dylan Castillo <dylan@iwanalabs.com>"]
packages = [
{include = "src"}
]
[tool.poetry.dependencies]
python = "^3.10"
Django = "^5.0.1"
django-htmx = "^1.17.2"
WebTest = "^3.0.0"
django-environ = "^0.11.2"
whitenoise = "^6.6.0"
redis = "^5.0.1"
gunicorn = "^21.2.0"
django-components = "^0.67"
[tool.poetry.group.dev.dependencies]
black = "^23.7.0"
mypy = "^1.4.1"
ruff = "^0.0.282"
notebook = "^7.0.2"
types-requests = "^2.31.0.3"
djlint = "^1.34.0"
flake8 = "^7.0.0"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
================================================
FILE: src/app/__init__.py
================================================
================================================
FILE: src/app/admin.py
================================================
from django.contrib import admin
# Register your models here.
================================================
FILE: src/app/apps.py
================================================
from django.apps import AppConfig
class AppConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "app"
================================================
FILE: src/app/management/commands/clear_cache.py
================================================
from django.core.cache import cache
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = "Clear the cache"
def handle(self, *args, **kwargs):
cache.clear()
self.stdout.write(self.style.SUCCESS("Cache has been cleared!"))
================================================
FILE: src/app/management/commands/regenerate_data.py
================================================
from django.core.management.base import BaseCommand
from app.utils import create_contacts, create_brands_and_cars, delete_contacts
class Command(BaseCommand):
help = "Deletes old data and regenerates new data"
def handle(self, *args, **kwargs):
delete_contacts()
create_contacts(count=100)
create_brands_and_cars()
self.stdout.write(self.style.SUCCESS("Successfully regenerated data"))
================================================
FILE: src/app/migrations/0001_initial.py
================================================
# Generated by Django 5.0.1 on 2024-01-31 21:59
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name="Brand",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
],
),
migrations.CreateModel(
name="Contact",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("first_name", models.CharField(max_length=100)),
("last_name", models.CharField(max_length=100)),
("email", models.EmailField(max_length=254)),
("status", models.CharField(default="Inactive", max_length=100)),
],
),
migrations.CreateModel(
name="Job",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("progress", models.IntegerField(default=0)),
],
),
migrations.CreateModel(
name="CarModel",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
(
"brand",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="app.brand"
),
),
],
),
]
================================================
FILE: src/app/migrations/0002_init_data.py
================================================
# Generated by Django 5.0.1 on 2024-01-31 21:10
from django.db import migrations
def create_initial_data(apps, schema_editor):
from app.utils import create_contacts, create_brands_and_cars
Contact = apps.get_model("app", "Contact")
Brand = apps.get_model("app", "Brand")
CarModel = apps.get_model("app", "CarModel")
create_contacts(count=100)
create_brands_and_cars()
class Migration(migrations.Migration):
dependencies = [
("app", "0001_initial"),
]
operations = [
migrations.RunPython(create_initial_data),
]
================================================
FILE: src/app/migrations/0003_sitemap.py
================================================
from django.db import migrations
from django.contrib.sites.models import Site
def create_site(apps, schema_editor):
Site.objects.all().delete()
Site.objects.create(domain="dhc.iwanalabs.com", name="Iwana Labs")
class Migration(migrations.Migration):
dependencies = [
("app", "0002_init_data"),
("sites", "0002_alter_domain_unique"),
]
operations = [
migrations.RunPython(create_site),
]
================================================
FILE: src/app/migrations/__init__.py
================================================
================================================
FILE: src/app/models.py
================================================
from django.db import models
# Create your models here.
class Contact(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField()
status = models.CharField(max_length=100, default="Inactive")
class Job(models.Model):
progress = models.IntegerField(default=0)
class Brand(models.Model):
name = models.CharField(max_length=100)
class CarModel(models.Model):
name = models.CharField(max_length=100)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
================================================
FILE: src/app/sitemap.py
================================================
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
class StaticViewSitemap(Sitemap):
priority = 0.5
changefreq = "daily"
def items(self):
return [
# "index",
"active_search",
"bulk_update",
"cascading_selects",
"click_to_edit",
"click_to_load",
"delete_row",
"edit_row",
"infinite_scroll",
"inline_validation",
"progress_bar",
]
def location(self, item):
return reverse(item)
================================================
FILE: src/app/tests.py
================================================
from django.test import TestCase
# Create your tests here.
================================================
FILE: src/app/urls.py
================================================
from django.urls import path
from app import views
urlpatterns = [
path("", views.index, name="index"),
path("active_search/", views.active_search, name="active_search"),
path("bulk_update/", views.bulk_update, name="bulk_update"),
path("cascading_selects/", views.cascading_selects, name="cascading_selects"),
path("click_to_edit/", views.click_to_edit, name="click_to_edit"),
path("click_to_load/", views.click_to_load, name="click_to_load"),
path("delete_row/", views.delete_row, name="delete_row"),
path("edit_row/", views.edit_row, name="edit_row"),
path("infinite_scroll/", views.infinite_scroll, name="infinite_scroll"),
path("inline_validation/", views.inline_validation, name="inline_validation"),
path("progress_bar/", views.progress_bar, name="progress_bar"),
]
================================================
FILE: src/app/utils.py
================================================
from app.models import Contact, Brand, CarModel
contacts_list = [
{
"id": 1,
"first_name": "Kathy",
"last_name": "Lang",
"email": "kathy.lang@gmail.com",
"status": "inactive",
},
{
"id": 2,
"first_name": "Roberto",
"last_name": "Perez",
"email": "roberto.perez@hotmail.com",
"status": "inactive",
},
{
"id": 3,
"first_name": "Cody",
"last_name": "House",
"email": "cody.house@yahoo.com",
"status": "inactive",
},
{
"id": 4,
"first_name": "Brittany",
"last_name": "Thomas",
"email": "brittany.thomas@yahoo.com",
"status": "inactive",
},
{
"id": 5,
"first_name": "Tina",
"last_name": "Hines",
"email": "tina.hines@yahoo.com",
"status": "inactive",
},
{
"id": 6,
"first_name": "Nicholas",
"last_name": "Smith",
"email": "nicholas.smith@yahoo.com",
"status": "inactive",
},
{
"id": 7,
"first_name": "Robert",
"last_name": "Bennett",
"email": "robert.bennett@hotmail.com",
"status": "inactive",
},
{
"id": 8,
"first_name": "Sherri",
"last_name": "Stone",
"email": "sherri.stone@gmail.com",
"status": "inactive",
},
{
"id": 9,
"first_name": "Nichole",
"last_name": "Hart",
"email": "nichole.hart@gmail.com",
"status": "active",
},
{
"id": 10,
"first_name": "Kelly",
"last_name": "Hines",
"email": "kelly.hines@hotmail.com",
"status": "active",
},
{
"id": 11,
"first_name": "Annette",
"last_name": "Munoz",
"email": "annette.munoz@yahoo.com",
"status": "active",
},
{
"id": 12,
"first_name": "Matthew",
"last_name": "Conner",
"email": "matthew.conner@gmail.com",
"status": "active",
},
{
"id": 13,
"first_name": "Miranda",
"last_name": "Beck",
"email": "miranda.beck@yahoo.com",
"status": "active",
},
{
"id": 14,
"first_name": "Michelle",
"last_name": "Wilson",
"email": "michelle.wilson@yahoo.com",
"status": "active",
},
{
"id": 15,
"first_name": "Sarah",
"last_name": "Collins",
"email": "sarah.collins@hotmail.com",
"status": "active",
},
{
"id": 16,
"first_name": "Jack",
"last_name": "Hall",
"email": "jack.hall@gmail.com",
"status": "active",
},
{
"id": 17,
"first_name": "Brandon",
"last_name": "Taylor",
"email": "brandon.taylor@gmail.com",
"status": "active",
},
{
"id": 18,
"first_name": "Stacey",
"last_name": "Stevens",
"email": "stacey.stevens@gmail.com",
"status": "active",
},
{
"id": 19,
"first_name": "Brandon",
"last_name": "Pitts",
"email": "brandon.pitts@gmail.com",
"status": "inactive",
},
{
"id": 20,
"first_name": "Matthew",
"last_name": "Bowers",
"email": "matthew.bowers@hotmail.com",
"status": "inactive",
},
{
"id": 21,
"first_name": "John",
"last_name": "Mccullough",
"email": "john.mccullough@yahoo.com",
"status": "inactive",
},
{
"id": 22,
"first_name": "Lisa",
"last_name": "Bartlett",
"email": "lisa.bartlett@gmail.com",
"status": "active",
},
{
"id": 23,
"first_name": "Brittany",
"last_name": "Buck",
"email": "brittany.buck@yahoo.com",
"status": "active",
},
{
"id": 24,
"first_name": "Elizabeth",
"last_name": "Campbell",
"email": "elizabeth.campbell@gmail.com",
"status": "inactive",
},
{
"id": 25,
"first_name": "Emily",
"last_name": "Maldonado",
"email": "emily.maldonado@hotmail.com",
"status": "active",
},
{
"id": 26,
"first_name": "Andrew",
"last_name": "Murphy",
"email": "andrew.murphy@gmail.com",
"status": "inactive",
},
{
"id": 27,
"first_name": "Kristen",
"last_name": "Ramsey",
"email": "kristen.ramsey@hotmail.com",
"status": "active",
},
{
"id": 28,
"first_name": "Jason",
"last_name": "Williams",
"email": "jason.williams@hotmail.com",
"status": "active",
},
{
"id": 29,
"first_name": "Deborah",
"last_name": "Wagner",
"email": "deborah.wagner@yahoo.com",
"status": "active",
},
{
"id": 30,
"first_name": "Paula",
"last_name": "Fisher",
"email": "paula.fisher@yahoo.com",
"status": "active",
},
{
"id": 31,
"first_name": "Alicia",
"last_name": "Clark",
"email": "alicia.clark@yahoo.com",
"status": "inactive",
},
{
"id": 32,
"first_name": "James",
"last_name": "Holt",
"email": "james.holt@hotmail.com",
"status": "active",
},
{
"id": 33,
"first_name": "Laura",
"last_name": "Davis",
"email": "laura.davis@gmail.com",
"status": "active",
},
{
"id": 34,
"first_name": "Jason",
"last_name": "Richardson",
"email": "jason.richardson@yahoo.com",
"status": "inactive",
},
{
"id": 35,
"first_name": "Richard",
"last_name": "Jordan",
"email": "richard.jordan@gmail.com",
"status": "active",
},
{
"id": 36,
"first_name": "Natalie",
"last_name": "Armstrong",
"email": "natalie.armstrong@hotmail.com",
"status": "active",
},
{
"id": 37,
"first_name": "Matthew",
"last_name": "Hunt",
"email": "matthew.hunt@yahoo.com",
"status": "inactive",
},
{
"id": 38,
"first_name": "Joseph",
"last_name": "Maldonado",
"email": "joseph.maldonado@gmail.com",
"status": "inactive",
},
{
"id": 39,
"first_name": "Caleb",
"last_name": "White",
"email": "caleb.white@hotmail.com",
"status": "active",
},
{
"id": 40,
"first_name": "Andrew",
"last_name": "Dodson",
"email": "andrew.dodson@hotmail.com",
"status": "inactive",
},
{
"id": 41,
"first_name": "Veronica",
"last_name": "Cortez",
"email": "veronica.cortez@hotmail.com",
"status": "active",
},
{
"id": 42,
"first_name": "Jesse",
"last_name": "Arroyo",
"email": "jesse.arroyo@gmail.com",
"status": "active",
},
{
"id": 43,
"first_name": "Tina",
"last_name": "Jensen",
"email": "tina.jensen@yahoo.com",
"status": "active",
},
{
"id": 44,
"first_name": "Todd",
"last_name": "Gallagher",
"email": "todd.gallagher@gmail.com",
"status": "active",
},
{
"id": 45,
"first_name": "Roberto",
"last_name": "Anderson",
"email": "roberto.anderson@hotmail.com",
"status": "active",
},
{
"id": 46,
"first_name": "Stacey",
"last_name": "Morrison",
"email": "stacey.morrison@yahoo.com",
"status": "inactive",
},
{
"id": 47,
"first_name": "David",
"last_name": "Hicks",
"email": "david.hicks@yahoo.com",
"status": "active",
},
{
"id": 48,
"first_name": "Richard",
"last_name": "Tucker",
"email": "richard.tucker@gmail.com",
"status": "active",
},
{
"id": 49,
"first_name": "Miguel",
"last_name": "Baker",
"email": "miguel.baker@yahoo.com",
"status": "inactive",
},
{
"id": 50,
"first_name": "Antonio",
"last_name": "Flynn",
"email": "antonio.flynn@gmail.com",
"status": "active",
},
{
"id": 51,
"first_name": "Katrina",
"last_name": "Butler",
"email": "katrina.butler@gmail.com",
"status": "inactive",
},
{
"id": 52,
"first_name": "Jennifer",
"last_name": "Pitts",
"email": "jennifer.pitts@hotmail.com",
"status": "active",
},
{
"id": 53,
"first_name": "Randall",
"last_name": "Sanchez",
"email": "randall.sanchez@gmail.com",
"status": "active",
},
{
"id": 54,
"first_name": "Sara",
"last_name": "Garcia",
"email": "sara.garcia@gmail.com",
"status": "inactive",
},
{
"id": 55,
"first_name": "Scott",
"last_name": "Edwards",
"email": "scott.edwards@gmail.com",
"status": "active",
},
{
"id": 56,
"first_name": "Kelly",
"last_name": "Arnold",
"email": "kelly.arnold@gmail.com",
"status": "inactive",
},
{
"id": 57,
"first_name": "Jeffrey",
"last_name": "Johnson",
"email": "jeffrey.johnson@hotmail.com",
"status": "active",
},
{
"id": 58,
"first_name": "Carlos",
"last_name": "Jennings",
"email": "carlos.jennings@hotmail.com",
"status": "inactive",
},
{
"id": 59,
"first_name": "Jodi",
"last_name": "Gray",
"email": "jodi.gray@hotmail.com",
"status": "active",
},
{
"id": 60,
"first_name": "James",
"last_name": "Davis",
"email": "james.davis@yahoo.com",
"status": "inactive",
},
{
"id": 61,
"first_name": "Anita",
"last_name": "Day",
"email": "anita.day@gmail.com",
"status": "active",
},
{
"id": 62,
"first_name": "Christopher",
"last_name": "Gilbert",
"email": "christopher.gilbert@gmail.com",
"status": "inactive",
},
{
"id": 63,
"first_name": "David",
"last_name": "Farrell",
"email": "david.farrell@yahoo.com",
"status": "active",
},
{
"id": 64,
"first_name": "Elizabeth",
"last_name": "Williams",
"email": "elizabeth.williams@gmail.com",
"status": "inactive",
},
{
"id": 65,
"first_name": "Bill",
"last_name": "Walters",
"email": "bill.walters@hotmail.com",
"status": "active",
},
{
"id": 66,
"first_name": "Carla",
"last_name": "Jones",
"email": "carla.jones@gmail.com",
"status": "inactive",
},
{
"id": 67,
"first_name": "Tiffany",
"last_name": "Berry",
"email": "tiffany.berry@yahoo.com",
"status": "inactive",
},
{
"id": 68,
"first_name": "Eddie",
"last_name": "Mclean",
"email": "eddie.mclean@yahoo.com",
"status": "active",
},
{
"id": 69,
"first_name": "Amanda",
"last_name": "Johns",
"email": "amanda.johns@gmail.com",
"status": "inactive",
},
{
"id": 70,
"first_name": "Jennifer",
"last_name": "Gray",
"email": "jennifer.gray@gmail.com",
"status": "active",
},
{
"id": 71,
"first_name": "Melinda",
"last_name": "Whitney",
"email": "melinda.whitney@hotmail.com",
"status": "inactive",
},
{
"id": 72,
"first_name": "Vanessa",
"last_name": "Carr",
"email": "vanessa.carr@gmail.com",
"status": "inactive",
},
{
"id": 73,
"first_name": "Alyssa",
"last_name": "Riley",
"email": "alyssa.riley@gmail.com",
"status": "inactive",
},
{
"id": 74,
"first_name": "Sarah",
"last_name": "Torres",
"email": "sarah.torres@yahoo.com",
"status": "active",
},
{
"id": 75,
"first_name": "Tanya",
"last_name": "Alexander",
"email": "tanya.alexander@gmail.com",
"status": "active",
},
{
"id": 76,
"first_name": "Kaitlyn",
"last_name": "Baker",
"email": "kaitlyn.baker@gmail.com",
"status": "active",
},
{
"id": 77,
"first_name": "Lori",
"last_name": "Kim",
"email": "lori.kim@hotmail.com",
"status": "active",
},
{
"id": 78,
"first_name": "Jeff",
"last_name": "Pace",
"email": "jeff.pace@gmail.com",
"status": "active",
},
{
"id": 79,
"first_name": "Christopher",
"last_name": "Mclaughlin",
"email": "christopher.mclaughlin@yahoo.com",
"status": "active",
},
{
"id": 80,
"first_name": "Erica",
"last_name": "Suarez",
"email": "erica.suarez@hotmail.com",
"status": "inactive",
},
{
"id": 81,
"first_name": "Steven",
"last_name": "Hicks",
"email": "steven.hicks@gmail.com",
"status": "active",
},
{
"id": 82,
"first_name": "Emily",
"last_name": "Graham",
"email": "emily.graham@gmail.com",
"status": "active",
},
{
"id": 83,
"first_name": "Austin",
"last_name": "Villarreal",
"email": "austin.villarreal@gmail.com",
"status": "inactive",
},
{
"id": 84,
"first_name": "Rebecca",
"last_name": "Smith",
"email": "rebecca.smith@hotmail.com",
"status": "inactive",
},
{
"id": 85,
"first_name": "Daniel",
"last_name": "Booth",
"email": "daniel.booth@gmail.com",
"status": "inactive",
},
{
"id": 86,
"first_name": "Alexandra",
"last_name": "Underwood",
"email": "alexandra.underwood@yahoo.com",
"status": "active",
},
{
"id": 87,
"first_name": "Ashley",
"last_name": "Mills",
"email": "ashley.mills@yahoo.com",
"status": "active",
},
{
"id": 88,
"first_name": "Ashley",
"last_name": "Vaughn",
"email": "ashley.vaughn@yahoo.com",
"status": "active",
},
{
"id": 89,
"first_name": "Kimberly",
"last_name": "Gomez",
"email": "kimberly.gomez@hotmail.com",
"status": "active",
},
{
"id": 90,
"first_name": "Kristin",
"last_name": "Davis",
"email": "kristin.davis@yahoo.com",
"status": "inactive",
},
{
"id": 91,
"first_name": "Gerald",
"last_name": "James",
"email": "gerald.james@gmail.com",
"status": "inactive",
},
{
"id": 92,
"first_name": "Alyssa",
"last_name": "Adams",
"email": "alyssa.adams@hotmail.com",
"status": "inactive",
},
{
"id": 93,
"first_name": "Hector",
"last_name": "Smith",
"email": "hector.smith@yahoo.com",
"status": "active",
},
{
"id": 94,
"first_name": "Amanda",
"last_name": "Hill",
"email": "amanda.hill@hotmail.com",
"status": "inactive",
},
{
"id": 95,
"first_name": "Karla",
"last_name": "Thornton",
"email": "karla.thornton@yahoo.com",
"status": "inactive",
},
{
"id": 96,
"first_name": "Elizabeth",
"last_name": "Johnson",
"email": "elizabeth.johnson@hotmail.com",
"status": "active",
},
{
"id": 97,
"first_name": "Benjamin",
"last_name": "Chambers",
"email": "benjamin.chambers@yahoo.com",
"status": "active",
},
{
"id": 98,
"first_name": "James",
"last_name": "Coleman",
"email": "james.coleman@yahoo.com",
"status": "active",
},
{
"id": 99,
"first_name": "Joseph",
"last_name": "Johnson",
"email": "joseph.johnson@hotmail.com",
"status": "active",
},
{
"id": 100,
"first_name": "Amanda",
"last_name": "Roman",
"email": "amanda.roman@gmail.com",
"status": "inactive",
},
]
brands_list = [
"Toyota",
"Ford",
"Honda",
"Chevrolet",
]
car_models_list = {
"Toyota": [
"4Runner",
"Avalon",
"Camry",
"Corolla",
"Highlander",
"Land Cruiser",
"Prius",
"RAV4",
"Sequoia",
"Sienna",
"Tacoma",
"Tundra",
"Yaris",
],
"Ford": [
"Bronco",
"EcoSport",
"Edge",
"Escape",
"Expedition",
"Explorer",
"F-150",
"F-250",
"F-350",
"F-450",
"Fiesta",
"Flex",
"Focus",
"Fusion",
"Mustang",
"Ranger",
"Taurus",
"Transit",
],
"Honda": [
"Accord",
"Civic",
"Clarity",
"CR-V",
"Fit",
"HR-V",
"Insight",
"Odyssey",
"Passport",
"Pilot",
"Ridgeline",
],
"Chevrolet": [
"Blazer",
"Bolt EV",
"Camaro",
"Colorado",
"Corvette",
"Equinox",
"Express",
"Impala",
"Malibu",
"Silverado",
"Sonic",
"Spark",
"Suburban",
"Tahoe",
"Trailblazer",
"Traverse",
"Trax",
],
}
def source_link(link):
return "https://github.com/iwanalabs/django-htmx-components/blob/main/src/" + link
def delete_contacts():
Contact.objects.all().delete()
def create_contacts(contacts=contacts_list, count=None):
for contact in contacts[:count]:
Contact.objects.get_or_create(
id=contact["id"],
defaults={
"first_name": contact["first_name"],
"last_name": contact["last_name"],
"email": contact["email"],
"status": contact["status"],
},
)
def create_brands_and_cars():
for brand in brands_list:
Brand.objects.get_or_create(name=brand)
for car_model in car_models_list[brand]:
CarModel.objects.get_or_create(
name=car_model, brand=Brand.objects.get(name=brand)
)
================================================
FILE: src/app/views.py
================================================
from django.shortcuts import render, resolve_url
from app.models import Contact
from app.utils import source_link
def index(request):
components = [
{"name": "Active Search", "url": resolve_url("active_search")},
{"name": "Bulk Update", "url": resolve_url("bulk_update")},
{"name": "Cascading Selects", "url": resolve_url("cascading_selects")},
{"name": "Click to Edit", "url": resolve_url("click_to_edit")},
{"name": "Click to Load", "url": resolve_url("click_to_load")},
{"name": "Delete Row", "url": resolve_url("delete_row")},
{"name": "Edit Row", "url": resolve_url("edit_row")},
{"name": "Infinite Scroll", "url": resolve_url("infinite_scroll")},
{"name": "Inline Validation", "url": resolve_url("inline_validation")},
{"name": "Progress Bar", "url": resolve_url("progress_bar")},
]
return render(request, "index.html", {"components": components})
def inline_validation(request):
files = [
{
"name": "components/inline_validation/form.py",
"path": "inline_validation/form.py",
},
{
"name": "components/inline_validation/forms.py",
"path": "inline_validation/forms.py",
},
{
"name": "components/inline_validation/input.py",
"path": "inline_validation/input.py",
},
{
"name": "components/urls.py",
"path": "inline_validation/urls.py",
},
{"name": "template/inline_validation.html", "path": "inline_validation.html"},
]
return render(
request,
"inline_validation.html",
{
"files": files,
"title": "Inline Validation",
"description": "Inline validation of a Django form",
"full_code_url": source_link("components/inline_validation"),
},
)
def bulk_update(request):
files = [
{"name": "components/bulk_update/table.py", "path": "bulk_update/table.py"},
{"name": "components/bulk_update/tbody.py", "path": "bulk_update/tbody.py"},
{"name": "components/bulk_update/urls.py", "path": "bulk_update/urls.py"},
{"name": "template/bulk_update.html", "path": "bulk_update.html"},
]
return render(
request,
"bulk_update.html",
{
"files": files,
"title": "Bulk Update",
"description": "Bulk update of Django models",
"full_code_url": source_link("components/bulk_update"),
},
)
def click_to_load(request):
files = [
{"name": "components/click_to_load/table.py", "path": "click_to_load/table.py"},
{"name": "components/click_to_load/tbody.py", "path": "click_to_load/tbody.py"},
{"name": "components/click_to_load/urls.py", "path": "click_to_load/urls.py"},
{"name": "template/click_to_load.html", "path": "click_to_load.html"},
]
return render(
request,
"click_to_load.html",
{
"files": files,
"title": "Click to Load",
"description": "Click to load more data",
"full_code_url": source_link("components/click_to_load"),
},
)
def edit_row(request):
files = [
{"name": "components/edit_row/row.py", "path": "edit_row/row.py"},
{"name": "components/edit_row/table.py", "path": "edit_row/table.py"},
{"name": "components/edit_row/urls.py", "path": "edit_row/urls.py"},
{"name": "template/edit_row.html", "path": "edit_row.html"},
]
return render(
request,
"edit_row.html",
{
"files": files,
"title": "Edit Row",
"description": "Inline editing of a Django model",
"full_code_url": source_link("components/edit_row"),
},
)
def delete_row(request):
files = [
{"name": "components/delete_row.py", "path": "delete_row.py"},
{"name": "components/urls.py", "path": "urls.py", "lines": [10, 14]},
{"name": "template/delete_row.html", "path": "delete_row.html"},
]
return render(
request,
"delete_row.html",
{
"files": files,
"title": "Delete Row",
"description": "Inline editing of a Django model",
"full_code_url": source_link("components/delete_row.py"),
},
)
def click_to_edit(request):
files = [
{"name": "components/click_to_edit.py", "path": "click_to_edit.py"},
{"name": "components/urls.py", "path": "urls.py", "lines": [15, 24]},
{"name": "template/click_to_edit.html", "path": "click_to_edit.html"},
]
id = Contact.objects.first().id
return render(
request,
"click_to_edit.html",
{
"files": files,
"first_available_id": id,
"title": "Click to Edit",
"description": "Inline editing of a Django model",
"full_code_url": source_link("components/click_to_edit.py"),
},
)
def infinite_scroll(request):
files = [
{
"name": "components/infinite_scroll/table.py",
"path": "infinite_scroll/table.py",
},
{
"name": "components/infinite_scroll/tbody.py",
"path": "infinite_scroll/tbody.py",
},
{
"name": "components/infinite_scroll/urls.py",
"path": "infinite_scroll/urls.py",
},
{"name": "template/infinite_scroll.html", "path": "infinite_scroll.html"},
]
return render(
request,
"infinite_scroll.html",
{
"files": files,
"title": "Infinite Scroll",
"description": "Infinite scroll of a Django model",
"full_code_url": source_link("components/infinite_scroll"),
},
)
def active_search(request):
files = [
{"name": "components/active_search/input.py", "path": "active_search/input.py"},
{"name": "components/active_search/tbody.py", "path": "active_search/tbody.py"},
{"name": "components/active_search/urls.py", "path": "active_search/urls.py"},
{"name": "template/active_search.html", "path": "active_search.html"},
]
return render(
request,
"active_search.html",
{
"files": files,
"title": "Active Search",
"description": "Active search of a Django model",
"full_code_url": source_link("components/active_search"),
},
)
def progress_bar(request):
files = [
{"name": "components/progress_bar/bar.py", "path": "progress_bar/bar.py"},
{"name": "components/progress_bar/start.py", "path": "progress_bar/start.py"},
{"name": "components/progress_bar/status.py", "path": "progress_bar/status.py"},
{"name": "components/progress_bar/urls.py", "path": "progress_bar/urls.py"},
{"name": "template/progress_bar.html", "path": "progress_bar.html"},
]
return render(
request,
"progress_bar.html",
{
"files": files,
"title": "Progress Bar",
"description": "Progress bar",
"full_code_url": source_link("components/progress_bar"),
},
)
def cascading_selects(request):
files = [
{
"name": "components/cascading_selects/parent_select.py",
"path": "cascading_selects/parent_select.py",
},
{
"name": "components/cascading_selects/select.py",
"path": "cascading_selects/select.py",
},
{
"name": "components/cascading_selects/urls.py",
"path": "cascading_selects/urls.py",
},
{"name": "template/cascading_selects.html", "path": "cascading_selects.html"},
]
return render(
request,
"cascading_selects.html",
{
"files": files,
"title": "Cascading Selects",
"description": "Cascading selects",
"full_code_url": source_link("components/cascading_selects"),
},
)
================================================
FILE: src/components/__init__.py
================================================
================================================
FILE: src/components/active_search/input.py
================================================
from django_components import component
@component.register("input_active_search")
class InputActiveSearchComponent(component.Component):
template = """
<div class="mb-4 w-[256px]">
<input class="input form-control" type="search"
name="search" placeholder="Search for a user"
hx-post="{% url 'tbody_active_search' %}"
hx-trigger="input changed delay:500ms, search"
hx-target="#search-results">
</div>
<table class="table">
<thead class="thead">
<tr>
<th class="th">First Name</th>
<th class="th">Last Name</th>
<th class="th">Email</th>
<th class="th">Status</th>
</tr>
</thead>
<tbody id="search-results">
</tbody>
</table>
"""
================================================
FILE: src/components/active_search/tbody.py
================================================
from django_components import component
from app.models import Contact
@component.register("tbody_active_search")
class TBodyActiveSearchComponent(component.Component):
template = """
{% for contact in contacts %}
<tr class="tr">
<td class="td">{{ contact.first_name }}</td>
<td class="td">{{ contact.last_name }}</td>
<td class="td">{{ contact.email }}</td>
<td class="td">{{ contact.status }}</td>
</tr>
{% endfor %}
"""
def post(self, request, **kwargs):
search = request.POST.get("search")
if not search:
return self.render_to_response({})
contacts = Contact.objects.filter(
first_name__icontains=search
) | Contact.objects.filter(last_name__icontains=search)
context = {"contacts": contacts.order_by("id")[:10]}
return self.render_to_response(context)
================================================
FILE: src/components/active_search/urls.py
================================================
from django.urls import path
from components.active_search.tbody import TBodyActiveSearchComponent
urlpatterns = [
path(
"search/",
TBodyActiveSearchComponent.as_view(),
name="tbody_active_search",
),
]
================================================
FILE: src/components/bulk_update/table.py
================================================
from django_components import component
from django.middleware.csrf import get_token
from app.models import Contact
@component.register("table_bulk_update")
class TableBulkUpdateComponent(component.Component):
template = """
<form id="checked-contacts">
<table class="table">
<thead class="thead">
<tr>
<th class="th"></th>
<th class="th">Name</th>
<th class="th">Email</th>
<th class="th">Status</th>
</tr>
</thead>
<tbody id="tbody">
{% component "tbody_bulk_update" contacts=contacts only %}{% endcomponent %}
</tbody>
</table>
</form>
<div class="mt-4" hx-include="#checked-contacts" hx-target="#tbody">
<button class="btn-primary"
hx-post="{% url 'contacts_bulk_update' update='activate' %}">Activate</button>
<button class="btn-secondary"
hx-post="{% url 'contacts_bulk_update' update='deactivate' %}">Deactivate</button>
</div>
"""
css = """
.htmx-settling tr.deactivate td {
background: lightcoral;
}
.htmx-settling tr.activate td {
background: darkseagreen;
}
tr td {
transition: all 1.2s;
}
"""
def get_context_data(self, **kwargs):
return {"contacts": Contact.objects.all().order_by("id")[:5]} # remove limit
================================================
FILE: src/components/bulk_update/tbody.py
================================================
from django_components import component
from app.models import Contact
@component.register("tbody_bulk_update")
class TBodyBulkUpdateComponent(component.Component):
template = """
{% for contact in contacts %}
<tr class="tr {% if contact.id in ids %} {{ update }} {% endif %}">
<td class="td"><input class="checkbox" type='checkbox' name='ids' value='{{ contact.id }}'></td>
<td class="td">{{ contact.first_name }} {{ contact.last_name }}</td>
<td class="td">{{ contact.email }}</td>
<td class="td">{{ contact.status }}</td>
</tr>
{% endfor %}
"""
css = """
.htmx-settling tr.deactivate td {
background: lightcoral;
}
.htmx-settling tr.activate td {
background: darkseagreen;
}
tr td {
transition: all 1.2s;
}
"""
def get_context_data(self, contacts, **kwargs):
return {"contacts": contacts}
def post(self, request, update, *args, **kwargs):
if update == "activate":
Contact.objects.filter(id__in=request.POST.getlist("ids")).update(
status="Active"
)
elif update == "deactivate":
Contact.objects.filter(id__in=request.POST.getlist("ids")).update(
status="Inactive"
)
context = {
"contacts": Contact.objects.all().order_by("id")[:5], # remove limit
"update": update,
"ids": [int(id_) for id_ in request.POST.getlist("ids")],
}
return self.render_to_response(context)
================================================
FILE: src/components/bulk_update/urls.py
================================================
from django.urls import path
from components.bulk_update.tbody import TBodyBulkUpdateComponent
urlpatterns = [
path(
"contacts/<str:update>",
TBodyBulkUpdateComponent.as_view(),
name="contacts_bulk_update",
),
]
================================================
FILE: src/components/cascading_selects/parent_select.py
================================================
from typing import Any, Dict
from django_components import component
from app.models import Brand
@component.register("parent_select_cascading_selects")
class ParentSelectCascadingSelectsComponent(component.Component):
template = """
<div>
<label class="label">Brand</label>
<select class="input" name="brand" hx-get="{% url 'select_cascading_selects' %}" hx-target="#models">
{% for brand in brands %}
<option value="{{ brand.id }}">{{ brand.name }}</option>
{% endfor %}
</select>
</div>
<div class="mt-2">
<label class="label">Model</label>
<select id="models" name="model" class="input">
{% component "select_cascading_selects" brand=brands.0.id %}{% endcomponent %}
</select>
</div>
"""
def get_context_data(self, *args, **kwargs) -> Dict[str, Any]:
brands = Brand.objects.order_by("name")
return {"brands": brands}
================================================
FILE: src/components/cascading_selects/select.py
================================================
from django_components import component
from app.models import CarModel
@component.register("select_cascading_selects")
class SelectCascadingSelectsComponent(component.Component):
template = """
{% for model in models %}
<option value="{{ model.id }}">{{ model.name }}</option>
{% endfor %}
"""
def get_context_data(self, brand, *args, **kwargs):
models = CarModel.objects.filter(brand=brand).order_by("name")
return {"models": models}
def get(self, request, *args, **kwargs):
brand = request.GET.get("brand")
models = CarModel.objects.filter(brand=brand).order_by("name")
return self.render_to_response({"models": models})
================================================
FILE: src/components/cascading_selects/urls.py
================================================
from django.urls import path
from components.cascading_selects.select import SelectCascadingSelectsComponent
urlpatterns = [
path(
"models/",
SelectCascadingSelectsComponent.as_view(),
name="select_cascading_selects",
),
]
================================================
FILE: src/components/click_to_edit.py
================================================
from django_components import component
from app.models import Contact
def build_context(contact, editing=False):
return {
"first_name": contact.first_name,
"last_name": contact.last_name,
"email": contact.email,
"id": contact.id,
"editing": editing,
}
@component.register("click_to_edit")
class ClickToEditComponent(component.Component):
template = """
{% if editing %}
<form hx-post="{% url 'contact' id=id %}" hx-target="this" hx-swap="outerHTML" class="form">
<div class="mb-5">
<label class="label" >First Name</label>
<input class="input" type="text" name="firstName" value="{{ first_name }}">
</div>
<div class="mb-5">
<label class="label">Last Name</label>
<input class="input" type="text" name="lastName" value="{{ last_name }}">
</div>
<div class="mb-5">
<label class="label">Email Address</label>
<input class="input" type="email" name="email" value="{{ email }}">
</div>
<div>
<button class="btn-primary">Submit</button>
<button class="btn-secondary" hx-get="{% url 'contact' id=id %}" preload>
Cancel
</button>
</div>
</form>
{% else %}
<div hx-target="this" hx-swap="outerHTML" class="form">
<div class="mb-5">
<label class="label" >First Name</label>
<input class="disabled-input" type="text" value="{{ first_name }}" disabled>
</div>
<div class="mb-5">
<label class="label">Last Name</label>
<input class="disabled-input" type="text" value="{{ last_name }}" disabled>
</div>
<div class="mb-5">
<label class="label">Email Address</label>
<input class="disabled-input" type="email" value="{{ email }}" disabled>
</div>
<button class="btn-primary" hx-get="{% url 'contact_edit' id=id %}" preload>Edit contact</button>
</div>
{% endif %}
"""
def get_context_data(self, id, **kwargs):
contact = Contact.objects.get(id=id)
return build_context(contact)
def get(self, request, id, *args, **kwargs):
contact = Contact.objects.get(id=id)
context = build_context(contact, request.path.endswith("edit"))
return self.render_to_response(context)
def post(self, request, id, *args, **kwargs):
contact = Contact.objects.get(id=id)
contact.first_name = request.POST.get("firstName")
contact.last_name = request.POST.get("lastName")
contact.email = request.POST.get("email")
contact.save()
context = build_context(contact, request.path.endswith("edit"))
return self.render_to_response(context)
================================================
FILE: src/components/click_to_load/table.py
================================================
from django.core.paginator import Paginator
from django_components import component
from app.models import Contact
@component.register("table_click_to_load")
class TableClickToLoadComponent(component.Component):
template = """
<table class="table">
<thead class="thead">
<tr>
<th></th>
<th class="td">Name</th>
<th class="td">Email</th>
<th class="td">Status</th>
</tr>
</thead>
<tbody id="tbody">
{% component "tbody_click_to_load" page_obj=page_obj only %}{% endcomponent %}
</tbody>
</table>
"""
def get_context_data(self, **kwargs):
paginator = Paginator(Contact.objects.order_by("id"), 3)
page_obj = paginator.get_page(1)
return {"page_obj": page_obj}
================================================
FILE: src/components/click_to_load/tbody.py
================================================
from django.core.paginator import Paginator
from django_components import component
from app.models import Contact
@component.register("tbody_click_to_load")
class TBodyClickToLoadComponent(component.Component):
template = """
{% for contact in page_obj %}
<tr class="tr">
<td class="td">{{ contact.id }}</td>
<td class="td">{{ contact.first_name }} {{ contact.last_name }}</td>
<td class="td">{{ contact.email }}</td>
<td class="td">{{ contact.status }}</td>
</tr>
{% if forloop.last and page_obj.has_next %}
<tr id="replaceMe">
<td colspan="4" class="td-tight text-center">
<button
class='btn-primary'
hx-get="{% url 'tbody_click_to_load' page=page_obj.next_page_number %}"
hx-target="#replaceMe"
hx-swap="outerHTML"
preload
>
Load more
</button>
</td>
</tr>
{% endif %}
{% endfor %}
"""
def get_context_data(self, page_obj, **kwargs):
return {"page_obj": page_obj}
def get(self, request, page, **kwargs):
paginator = Paginator(Contact.objects.order_by("id"), 3)
page_obj = paginator.get_page(page)
context = {"page_obj": page_obj}
return self.render_to_response(context)
================================================
FILE: src/components/click_to_load/urls.py
================================================
from django.urls import path
from components.click_to_load.tbody import TBodyClickToLoadComponent
urlpatterns = [
path(
"contacts/<int:page>",
TBodyClickToLoadComponent.as_view(),
name="tbody_click_to_load",
),
]
================================================
FILE: src/components/component_tabs/component_tabs.css
================================================
pre {
font-size: 14px !important;
max-height: 100vh;
overflow: scroll;
}
div.code-toolbar > .toolbar {
top: 0.8em;
right: 0.5em;
}
div.code-toolbar > .toolbar > .toolbar-item > a,
div.code-toolbar > .toolbar > .toolbar-item > button,
div.code-toolbar > .toolbar > .toolbar-item > span {
padding: 0.2em 0.5em;
border-radius: 0.3rem;
}
================================================
FILE: src/components/component_tabs/component_tabs.html
================================================
{% load static %}
<div class="flex flex-col items-center lg:items-start lg:flex-row lg:justify-between">
<div class="w-full md:w-1/2 mx-auto my-10 flex flex-col items-center px-4">
<h1 class="text-center text-4xl font-bold mt-20">{{ title }}</h1>
<p class="text-center font-light">{{ description }}</p>
<div class=" w-full flex flex-col items-center mt-6">{% slot "component_code" %} {% endslot %}</div>
</div>
<div class="px-8 py-12 lg:py-8 flex flex-col items-center min-h-screen w-full lg:mt-0 lg:w-1/2 bg-slate-100">
<div class="w-full flex flex-col gap-2 items-center sm:flex sm:flex-row sm:items-start justify-between lg:mt-20">
<div>
<label for="tabs" class="sr-only">Select a file</label>
<select id="tabs"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500">
{% for file in files %}
<option value="button-{{ forloop.counter }}"
id="button-{{ forloop.counter }}"
data-target="content-{{ forloop.counter }}">{{ file.name }}</option>
{% endfor %}
</select>
</div>
<a href="{{ full_code_url }}"
class="btn-primary flex flex-row items-center gap-2 whitespace-nowrap"
target="_blank"
rel="noopener noreferrer">
<svg class="w-[16px] h-[16px] text-white-600 dark:text-slate-800"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18 14v4.8a1.2 1.2 0 0 1-1.2 1.2H5.2A1.2 1.2 0 0 1 4 18.8V7.2A1.2 1.2 0 0 1 5.2 6h4.6m4.4-2H20v5.8m-7.9 2L20 4.2" />
</svg>
Source code</a>
</div>
<div class="w-full">
{% for file in files %}
<div id="content-{{ forloop.counter }}"
role="tabpanel"
class="tab-content"
aria-labelledby="button-{{ forloop.counter }}">
{# djlint: off #}
<pre class="language-python line-numbers"
{% if file.lines %}data-range="{{ file.lines.0 }}, {{ file.lines.1 }}"{% endif %}
data-src="{% static ''|add:file.path %}">
</pre>
{# djlint: on #}
</div>
{% endfor %}
</div>
</div>
</div>
================================================
FILE: src/components/component_tabs/component_tabs.js
================================================
function updateTabs() {
Prism.highlightAll();
const tabsSelect = document.getElementById("tabs");
const contentTabs = document.getElementsByClassName("tab-content");
for (let i = 0; i < contentTabs.length; i++) {
contentTabs[i].classList.add("hidden");
}
let tabOption = document.getElementById(tabsSelect.value);
let tabContent = document.getElementById(tabOption.dataset.target);
console.log(tabContent);
tabContent.classList.remove("hidden");
tabsSelect.addEventListener("change", function (event) {
tabOption = document.getElementById(event.target.value);
tabContent = document.getElementById(tabOption.dataset.target);
for (let i = 0; i < contentTabs.length; i++) {
contentTabs[i].classList.add("hidden");
}
tabContent.classList.remove("hidden");
});
}
document.addEventListener("DOMContentLoaded", function (event) {
if (window.location.pathname !== "/") {
updateTabs();
}
});
document.addEventListener("htmx:afterSwap", function (event) {
if (event.detail.target.id == "header" && window.location.pathname !== "/") {
updateTabs();
}
});
================================================
FILE: src/components/component_tabs/component_tabs.py
================================================
from django_components import component
@component.register("component_tabs")
class ComponentTabsComponent(component.Component):
template_name = "component_tabs/component_tabs.html"
class Media:
js = "component_tabs/component_tabs.js"
css = "component_tabs/component_tabs.css"
================================================
FILE: src/components/delete_row.py
================================================
from django.http import HttpResponse
from django_components import component
from app.models import Contact
@component.register("delete_row")
class DeleteRowComponent(component.Component):
template = """
<table class="table">
<thead class="thead">
<tr>
<th class="td">Name</th>
<th class="td">Email</th>
<th class="td">Status</th>
<th class="td"></th>
</tr>
</thead>
<tbody id="tbody" hx-confirm="Are you sure?" hx-target="closest tr" hx-swap="outerHTML">
{% for contact in contacts %}
<tr class="tr {% if contact.id in ids %} {{ update }} {% endif %}">
<td class="td">{{ contact.first_name }} {{ contact.last_name }}</td>
<td class="td">{{ contact.email }}</td>
<td class="td">{{ contact.status }}</td>
<td class="td-tight">
<button class="btn-red-small" hx-delete="{% url 'contact_delete_row' id=contact.id %}">
Delete
</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
"""
css = """
tr.htmx-swapping td {
opacity: 0;
transition: opacity 1s ease-out;
}
"""
def delete(self, request, id, *args, **kwargs):
delete_id = int(id)
Contact.objects.filter(id=delete_id).delete()
return HttpResponse(status=200)
def get_context_data(self, **kwargs):
return {"contacts": Contact.objects.all().order_by("id")[:5]} # remove limit
================================================
FILE: src/components/edit_row/row.py
================================================
from django_components import component
from app.models import Contact
@component.register("row_edit_row")
class RowEditRowComponent(component.Component):
template = """
{% if not editing %}
<tr class="tr {% if contact.id in ids %} {{ update }} {% endif %}">
<td class="td">{{ contact.first_name }}</td>
<td class="td">{{ contact.last_name }}</td>
<td class="td">{{ contact.email }}</td>
<td class="td">
<button class="link" hx-get="{% url 'row_edit_row' id=contact.id %}?edit=True" hx-trigger="edit" onClick="editClick(this)">
Edit
</button>
</td>
</tr>
{% else %}
<tr hx-trigger='cancel' class='tr editing' hx-get="{% url 'row_edit_row' id=contact.id %}">
<td class="td-tight"><input class="input" name='first_name' value='{{ contact.first_name }}'></td>
<td class="td-tight"><input class="input" name='last_name' value='{{ contact.last_name }}'></td>
<td class="td-tight"><input class="input" name='email' value='{{ contact.email }}'></td>
<td class="td-tight flex flex-row gap-1">
<button class="btn-secondary-small" hx-get="{% url 'row_edit_row' id=contact.id %}">
✘
</button>
<button class="btn-primary-small" hx-post="{% url 'row_edit_row' id=contact.id %}" hx-include="closest tr">
✓
</button>
</td>
</tr>
{% endif %}
"""
js = """
function editClick(e) {
let editing = document.querySelector(".editing");
if (editing) {
let changeRow = confirm(
"Hey! You are already editing a row! Do you want to cancel that edit and continue?"
);
if (changeRow) {
htmx.trigger(editing, "cancel");
} else {
return;
}
htmx.trigger(e, "edit");
} else {
htmx.trigger(e, "edit");
}
}
"""
def get(self, request, id, *args, **kwargs):
editing = request.GET.get("edit", False)
contact = Contact.objects.get(id=id)
context = {"contact": contact, "editing": editing}
return self.render_to_response(context)
def post(self, request, id, *args, **kwargs):
contact = Contact.objects.get(id=id)
contact.first_name = request.POST.get("first_name")
contact.last_name = request.POST.get("last_name")
contact.email = request.POST.get("email")
contact.save()
return self.render_to_response({"contact": contact, "editing": False})
def get_context_data(self, contact, **kwargs):
return {"contact": contact}
================================================
FILE: src/components/edit_row/table.py
================================================
from django.http import HttpResponse
from django_components import component
from app.models import Contact
@component.register("table_edit_row")
class TableEditRowComponent(component.Component):
template = """
<table class="table">
<thead class="thead">
<tr>
<th scope="col" class="th">First name</th>
<th scope="col" class="th">Last name</th>
<th scope="col" class="th">Email</th>
<th scope="col" class="th"></th>
</tr>
</thead>
<tbody id="tbody" hx-target="closest tr" hx-swap="outerHTML">
{% for contact in contacts %}
{% component "row_edit_row" contact=contact only %}{% endcomponent %}
{% endfor %}
</tbody>
</table>
"""
def get_context_data(self, **kwargs):
return {"contacts": Contact.objects.all().order_by("id")[:5]} # remove limit
================================================
FILE: src/components/edit_row/urls.py
================================================
from django.urls import path
from components.edit_row.row import RowEditRowComponent
urlpatterns = [
path(
"contact/<int:id>",
RowEditRowComponent.as_view(),
name="row_edit_row",
),
]
================================================
FILE: src/components/infinite_scroll/table.py
================================================
from django.core.paginator import Paginator
from django_components import component
from app.models import Contact
@component.register("table_infinite_scroll")
class TableInfiniteScrollComponent(component.Component):
template = """
{% load static %}
<table class="table">
<thead class="thead">
<tr>
<th></th>
<th class="td">Name</th>
<th class="td">Email</th>
<th class="td">Status</th>
</tr>
</thead>
<tbody id="tbody">
{% component "tbody_infinite_scroll" page_obj=page_obj only %}{% endcomponent %}
</tbody>
</table>
<img id="busy-indicator"
width="24"
height="24"
src="{% static 'spinner.svg' %}" class="mt-2"/>
"""
def get_context_data(self, **kwargs):
paginator = Paginator(Contact.objects.order_by("id"), 5)
page_obj = paginator.get_page(1)
return {"page_obj": page_obj}
================================================
FILE: src/components/infinite_scroll/tbody.py
================================================
from django.core.paginator import Paginator
from django_components import component
from app.models import Contact
@component.register("tbody_infinite_scroll")
class TBodyInfiniteScrollComponent(component.Component):
template = """
{% for contact in page_obj %}
<tr class="tr"
{% if forloop.last and page_obj.has_next %}
hx-get="{% url 'tbody_infinite_scroll' page=page_obj.next_page_number %}"
hx-trigger="revealed"
hx-swap="afterend"
hx-target="this"
{% endif %}
>
<td class="td">{{ contact.id }}</td>
<td class="td">{{ contact.first_name }} {{ contact.last_name }}</td>
<td class="td">{{ contact.email }}</td>
<td class="td">{{ contact.status }}</td>
</tr>
{% endfor %}
"""
def get_context_data(self, page_obj, **kwargs):
return {"page_obj": page_obj}
def get(self, request, page, **kwargs):
paginator = Paginator(Contact.objects.order_by("id"), 10)
page_obj = paginator.get_page(page)
context = {"page_obj": page_obj}
return self.render_to_response(context)
================================================
FILE: src/components/infinite_scroll/urls.py
================================================
from django.urls import path
from components.infinite_scroll.tbody import TBodyInfiniteScrollComponent
urlpatterns = [
path(
"contacts/<int:page>",
TBodyInfiniteScrollComponent.as_view(),
name="tbody_infinite_scroll",
),
]
================================================
FILE: src/components/inline_validation/form.py
================================================
from django_components import component
from components.inline_validation.forms import InlineValidationForm
@component.register("form_inline_validation")
class FormInlineValidationComponent(component.Component):
template = """
<form id="inline-validation-form" class="form">
<div class="mb-5">
{{ form.name }}
{{ form.name.type.errors }}
</div>
<div class="mb-5">
{{ form.email }}
{{ form.email.type.errors }}
</div>
<div class="mb-5">
{{ form.age }}
{{ form.age.type.errors }}
</div>
<div class="mb-5">
{{ form.message }}
{{ form.message.type.errors }}
</div>
</form>
"""
def get_context_data(self, **kwargs):
form = InlineValidationForm()
return {"form": form}
def post(self, request, *args, **kwargs):
form = InlineValidationForm(request.POST)
return self.render_to_response({"form": form})
================================================
FILE: src/components/inline_validation/forms.py
================================================
from django import forms
from django.urls import reverse_lazy
from components.inline_validation.input import InputInlineValidationComponent
def htmx_inline_validated_input_widget_factory(base_widget_class):
class HtmxInlineValidatedInputWidget(base_widget_class):
def __init__(self, attrs=None, form=None, field_name=None, form_url=None):
super().__init__(attrs)
self.form = form
self.field_name = field_name
self.form_url = form_url
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["form_url"] = self.form_url
if self.form and self.field_name:
context["label"] = self.form.fields[self.field_name].label
context["errors"] = self.form.errors.get(self.field_name, [])
return context
def render(self, name, value, attrs=None, renderer=None):
context = self.get_context(name, value, attrs)
return InputInlineValidationComponent().render(context)
return HtmxInlineValidatedInputWidget
class HtmxFormBase(forms.Form):
form_url = ""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.label_suffix = ""
for name, field in self.fields.items():
if isinstance(field.widget, (forms.Select, forms.FileInput)):
continue
custom_widget = htmx_inline_validated_input_widget_factory(
type(field.widget)
)
field.widget = custom_widget(
form=self,
field_name=name,
attrs=field.widget.attrs,
form_url=self.form_url,
)
HtmxValidatedTextInput = htmx_inline_validated_input_widget_factory(forms.TextInput)
HtmxValidatedNumberInput = htmx_inline_validated_input_widget_factory(forms.NumberInput)
HtmxValidatedEmailInput = htmx_inline_validated_input_widget_factory(forms.EmailInput)
HtmxValidatedTextarea = htmx_inline_validated_input_widget_factory(forms.Textarea)
class InlineValidationForm(HtmxFormBase):
form_url = reverse_lazy("form_inline_validation")
name = forms.CharField(
label="Name",
max_length=100,
widget=HtmxValidatedTextInput(
attrs={"placeholder": "John Doe"},
),
)
email = forms.EmailField(
label="Email",
widget=HtmxValidatedEmailInput(attrs={"placeholder": "john@doe.com"}),
)
age = forms.IntegerField(
label="Age",
min_value=13,
max_value=120,
widget=HtmxValidatedNumberInput(
attrs={"placeholder": "e.g., 25"},
),
)
message = forms.CharField(
label="Message",
max_length=500,
widget=HtmxValidatedTextarea(
attrs={"placeholder": "Your message here...", "rows": 3},
),
)
================================================
FILE: src/components/inline_validation/input.py
================================================
from django_components import component
@component.register("input_inline_validation")
class InputInlineValidationComponent(component.Component):
template = """
<div id="{{ widget.attrs.id }}-field"
hx-select="#{{ widget.attrs.id }}-field"
hx-post="{{ form_url }}"
hx-trigger="blur from:#{{ widget.attrs.id }}"
hx-target="this"
hx-swap="outerHTML">
{% if label %}
<label class="label {% if errors %} text-red-700 dark:text-red-500 {% endif %}" for="{{ widget.attrs.id }}">{{ label }}</label>
{% endif %}
{% if not widget.type %}
<textarea class="{% if errors %} input-error {% else %} input {% endif %}" name="{{ widget.name }}"
{% for name, value in widget.attrs.items %}
{% if value is not False %}
{{ name }}
{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}
{% endif %}
{% endfor %}>{% if widget.value != None %}{{ widget.value|stringformat:'s' }}{% endif %}</textarea>
{% else %}
<input class="{% if errors %} input-error {% else %} input {% endif %}" type="{{ widget.type }}"
name="{{ widget.name }}"
{% if widget.value != None %}value="{{ widget.value|stringformat:'s' }}"{% endif %}
{% for name, value in widget.attrs.items %}
{% if value is not False %}
{{ name }}
{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}
{% endif %}
{% endfor %} />
{% endif %}
{% if errors %}
<ul>
{% for error in errors %}<li class="text-sm text-red-600 dark:text-red-500">{{ error }}</li>{% endfor %}
</ul>
{% endif %}
</div>
"""
================================================
FILE: src/components/inline_validation/urls.py
================================================
from django.urls import path
from components.inline_validation.form import FormInlineValidationComponent
urlpatterns = [
path(
"",
FormInlineValidationComponent.as_view(),
name="form_inline_validation",
),
]
================================================
FILE: src/components/progress_bar/bar.py
================================================
from django.http import HttpResponse
from django_components import component
from app.models import Job
@component.register("bar_progress_bar")
class BarProgressBarComponent(component.Component):
template = """
<div
hx-get="{% url 'bar_progress_bar' id=job.id %}"
{% if not done %}
hx-trigger="every 600ms"
{% else %}
hx-trigger="none"
{% endif %}
hx-target="this"
hx-swap="innerHTML">
<div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="{{ current_progress }}" aria-labelledby="pblabel">
<div id="pb" class="progress-bar" style="width:{{ current_progress }}%">
</div>
</div>
"""
css = """
.progress {
height: 20px;
margin-bottom: 20px;
overflow: hidden;
background-color: #f5f5f5;
border-radius: 4px;
box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
}
.progress-bar {
float: left;
width: 0%;
height: 100%;
font-size: 12px;
line-height: 20px;
color: #fff;
text-align: center;
background-color: rgb(26 86 219);
-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
-webkit-transition: width .6s ease;
-o-transition: width .6s ease;
transition: width .6s ease;
}
"""
def get_context_data(self, id, **kwargs):
job = Job.objects.get(id=id)
return {"job": job, "current_progress": job.progress}
def get(self, request, id, **kwargs):
job = Job.objects.get(id=id)
job.progress += 10
job.save()
context = {
"job": job,
"current_progress": job.progress,
}
headers = {}
if job.progress >= 100:
headers = {"HX-Trigger": "done"}
return HttpResponse(self.render(context), headers=headers)
================================================
FILE: src/components/progress_bar/start.py
================================================
from django_components import component
@component.register("start_progress_bar")
class StartProgressBar(component.Component):
template = """
<div hx-target="this" hx-swap="outerHTML" class="progress-bar-div">
<h3 class="h3 mb-2">Start background task</h3>
<button class="btn-primary" hx-post="{% url 'start_progress_bar' %}">
Start Job
</button>
</div>
"""
================================================
FILE: src/components/progress_bar/status.py
================================================
from typing import Any, Dict
from django_components import component
from app.models import Job
@component.register("status_progress_bar")
class StatusProgressBarComponent(component.Component):
template = """
<div class="progress-bar-div" hx-trigger="done" hx-get="{% url 'completed_progress_bar' id=job.id %}" hx-swap="outerHTML" hx-target="this">
<h3 role="status" id="pblabel" tabindex="-1" autofocus>
{% if not done %}
Running
{% else %}
Complete
{% endif %}
</h3>
{% component "bar_progress_bar" id=job.id done=done %}{% endcomponent %}
</div>
{% if done %}
<button id="restart-btn" class="btn-primary" hx-post="{% url 'start_progress_bar' %}" classes="add show:600ms">
Restart Job
</button>
{% endif %}
"""
def get(self, request, id, **kwargs):
job = Job.objects.get(id=id)
return self.render_to_response({"job": job, "done": True})
def post(self, request, **kwargs):
job = Job.objects.create(progress=0)
return self.render_to_response({"job": job})
================================================
FILE: src/components/progress_bar/urls.py
================================================
from django.urls import path
from components.progress_bar.bar import BarProgressBarComponent
from components.progress_bar.status import StatusProgressBarComponent
urlpatterns = [
path(
"start/",
StatusProgressBarComponent.as_view(),
name="start_progress_bar",
),
path(
"job/<int:id>/completed",
StatusProgressBarComponent.as_view(),
name="completed_progress_bar",
),
path(
"job/<int:id>/progress",
BarProgressBarComponent.as_view(),
name="bar_progress_bar",
),
]
================================================
FILE: src/components/urls.py
================================================
from django.urls import include, path
from components.click_to_edit import ClickToEditComponent
from components.delete_row import DeleteRowComponent
urlpatterns = [
path("active_search/", include("components.active_search.urls")),
path("bulk_update/", include("components.bulk_update.urls")),
path("cascading_selects/", include("components.cascading_selects.urls")),
path(
"click_to_edit/contact/<int:id>",
ClickToEditComponent.as_view(),
name="contact",
),
path(
"click_to_edit/contact/<int:id>/edit",
ClickToEditComponent.as_view(),
name="contact_edit",
),
path("click_to_load/", include("components.click_to_load.urls")),
path(
"delete_row/contact/<int:id>",
DeleteRowComponent.as_view(),
name="contact_delete_row",
),
path("edit_row/", include("components.edit_row.urls")),
path("infinite_scroll/", include("components.infinite_scroll.urls")),
path("inline_validation/", include("components.inline_validation.urls")),
path("progress_bar/", include("components.progress_bar.urls")),
]
================================================
FILE: src/config/__init__.py
================================================
================================================
FILE: src/config/asgi.py
================================================
"""
ASGI config for config project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
application = get_asgi_application()
================================================
FILE: src/config/settings.py
================================================
"""
Django settings for config project.
Generated by 'django-admin startproject' using Django 4.1.1.
For more information on this file, see
https://docs.djangoproject.com/en/4.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""
from pathlib import Path
import environ
# Build paths inside the project like this: BASE_DIR / 'subdir'.
ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent
BASE_DIR = ROOT_DIR / "src"
APP_DIR = BASE_DIR / "app"
# Read .env file
env = environ.Env()
environ.Env.read_env(
env_file=ROOT_DIR / ".env",
)
# Environment variables
SECRET_KEY = env("DJANGO_SECRET_KEY")
DEBUG = env.bool("DJANGO_DEBUG", default=False)
SECURE_SSL_REDIRECT = env.bool("DJANGO_SECURE_SSL_REDIRECT", default=True)
SECURE_HSTS_SECONDS = env.int("DJANGO_SECURE_HSTS_SECONDS", 31536000)
SECURE_HSTS_INCLUDE_SUBDOMAINS = env.bool(
"DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS", default=True
)
SECURE_HSTS_PRELOAD = env.bool("DJANGO_SECURE_HSTS_PRELOAD", default=True)
SESSION_COOKIE_SECURE = env.bool("DJANGO_SESSION_COOKIE_SECURE", default=True)
CSRF_COOKIE_SECURE = env.bool("DJANGO_CSRF_COOKIE_SECURE", default=True)
SECURE_PROXY_SSL_HEADER: tuple[str, str] | None = ("HTTP_X_FORWARDED_PROTO", "https")
ALLOWED_HOSTS = ["dhc.iwanalabs.com"]
DOMAIN_URL = "https://dhc.iwanalabs.com"
if DEBUG:
ALLOWED_HOSTS = ["*"]
SECURE_PROXY_SSL_HEADER = None
DOMAIN_URL = "http://localhost:8000"
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"whitenoise.runserver_nostatic",
"django.contrib.staticfiles",
# 3rd party
"django_components",
"django_htmx",
"django.contrib.sites",
"django.contrib.sitemaps",
# local
"app",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"django_htmx.middleware.HtmxMiddleware",
]
ROOT_URLCONF = "config.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [
BASE_DIR / "templates",
],
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
"loaders": [
(
"django.template.loaders.cached.Loader",
[
"django.template.loaders.filesystem.Loader",
"django.template.loaders.app_directories.Loader",
"django_components.template_loader.Loader",
],
)
],
"builtins": [
"django_components.templatetags.component_tags",
],
},
},
]
WSGI_APPLICATION = "config.wsgi.application"
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": ROOT_DIR / "db.sqlite3",
}
}
# Password validation
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
},
{
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
},
{
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
},
]
# Internationalization
# https://docs.djangoproject.com/en/4.1/topics/i18n/
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = "static/"
# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# whitenoise config
STATICFILES_DIRS = [
BASE_DIR / "components",
BASE_DIR / "static/output",
BASE_DIR / "templates",
]
STATIC_ROOT = BASE_DIR / "staticfiles"
STORAGES = {
"default": {
"BACKEND": "example.storages.ExtendedFileSystemStorage",
},
"staticfiles": {
"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
},
}
# cache settings
# CACHE_REDIS_URL = env("CACHE_REDIS_URL")
# CACHES = {
# "default": {
# "BACKEND": "django.core.cache.backends.redis.RedisCache",
# "LOCATION": CACHE_REDIS_URL,
# "OPTIONS": {
# "db": 1,
# },
# }
# }
SITE_ID = 1
================================================
FILE: src/config/urls.py
================================================
"""config URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
from django.urls import include, path
from app.sitemap import StaticViewSitemap
sitemaps = {
"static": StaticViewSitemap,
}
urlpatterns = [
path("", include("app.urls")),
path("components/", include("components.urls")),
path(
"sitemap.xml",
sitemap,
{"sitemaps": sitemaps},
name="django.contrib.sitemaps.views.sitemap",
),
# path("admin/", admin.site.urls),
]
================================================
FILE: src/config/wsgi.py
================================================
import os
from django.core.wsgi import get_wsgi_application
from django.db.backends.signals import connection_created
from django.dispatch import receiver
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
application = get_wsgi_application()
@receiver(connection_created)
def setup_sqlite(connection, **kwargs):
if connection.vendor != "sqlite":
return
with connection.cursor() as cursor:
cursor.execute("pragma journal_mode = WAL;")
cursor.execute("pragma synchronous = NORMAL;")
cursor.execute("PRAGMA busy_timeout = 10000;")
cursor.execute("pragma temp_store = memory;")
cursor.execute("pragma mmap_size = 256000000;")
================================================
FILE: src/manage.py
================================================
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()
================================================
FILE: src/static/input/style.css
================================================
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.btn-primary {
@apply text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800;
}
.btn-primary-small {
@apply px-3 py-2 text-xs font-medium text-center text-white bg-blue-700 rounded-lg hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800;
}
.btn-red {
@apply text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-red-600 dark:hover:bg-red-700 focus:outline-none dark:focus:ring-red-800;
}
.btn-red-small {
@apply px-3 py-2 text-xs font-medium text-center text-white bg-red-700 rounded-lg hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-800;
}
.btn-red-outline-small {
@apply px-3 py-2 text-xs font-medium text-center text-red-700 border border-red-700 rounded-lg hover:text-white hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:border-red-500 dark:text-red-500 dark:hover:text-white dark:hover:bg-red-500 dark:focus:ring-red-800;
}
.btn-secondary {
@apply text-blue-700 hover:text-white border border-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center me-2 mb-2 dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-500 dark:focus:ring-blue-800;
}
.btn-secondary-small {
@apply px-3 py-2 text-xs font-medium text-center text-blue-700 border border-blue-700 rounded-lg hover:text-white hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-500 dark:focus:ring-blue-800;
}
.label {
@apply block mb-2 text-sm font-medium text-slate-900 dark:text-white;
}
.input {
@apply bg-slate-50 border border-slate-300 text-slate-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-slate-700 dark:border-slate-600 dark:placeholder-slate-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500;
}
.input-error {
@apply bg-red-50 border border-red-500 text-red-900 placeholder-red-700 text-sm rounded-lg focus:ring-red-500 dark:bg-slate-700 focus:border-red-500 block w-full p-2.5 dark:text-red-500 dark:placeholder-red-500 dark:border-red-500;
}
.disabled-input {
@apply mb-5 bg-slate-100 border border-slate-300 text-slate-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 cursor-not-allowed dark:bg-slate-700 dark:border-slate-600 dark:placeholder-slate-400 dark:text-slate-400 dark:focus:ring-blue-500 dark:focus:border-blue-500;
}
.active-tab {
@apply inline-block px-4 py-3 text-white bg-blue-600 rounded-lg;
}
.inactive-tab {
@apply inline-block px-4 py-3 rounded-lg hover:text-slate-900 hover:bg-slate-100 dark:hover:bg-slate-800 dark:hover:text-white;
}
.link {
@apply font-medium text-blue-600 dark:text-blue-500 hover:underline;
}
.form {
@apply max-w-sm mx-auto max-w-sm mx-auto min-w-96;
}
.table {
@apply text-xs w-full sm:text-sm text-left rtl:text-right text-slate-500 dark:text-slate-400;
}
.thead {
@apply text-xs text-slate-700 uppercase bg-slate-50 dark:bg-slate-700 dark:text-slate-400;
}
.tr {
@apply bg-white border-b dark:bg-slate-800 dark:border-slate-700;
}
.td-tight {
@apply px-1 py-1 sm:px-3 sm:py-2;
}
.td {
@apply px-3 py-2 sm:px-6 sm:py-4;
}
.th {
@apply px-3 py-1.5 sm:px-6 sm:py-3;
}
.checkbox {
@apply w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600;
}
.h3 {
@apply text-lg font-semibold text-slate-900 dark:text-white;
}
.progress-bar-div {
@apply w-96 flex flex-col text-center justify-center;
}
}
================================================
FILE: src/static/output/preload.js
================================================
// This adds the "preload" extension to htmx. By default, this will
// preload the targets of any tags with `href` or `hx-get` attributes
// if they also have a `preload` attribute as well. See documentation
// for more details
htmx.defineExtension("preload", {
onEvent: function (name, event) {
// Only take actions on "htmx:afterProcessNode"
if (name !== "htmx:afterProcessNode") {
return;
}
// SOME HELPER FUNCTIONS WE'LL NEED ALONG THE WAY
// attr gets the closest non-empty value from the attribute.
var attr = function (node, property) {
if (node == undefined) {
return undefined;
}
return (
node.getAttribute(property) ||
node.getAttribute("data-" + property) ||
attr(node.parentElement, property)
);
};
// load handles the actual HTTP fetch, and uses htmx.ajax in cases where we're
// preloading an htmx resource (this sends the same HTTP headers as a regular htmx request)
var load = function (node) {
// Called after a successful AJAX request, to mark the
// content as loaded (and prevent additional AJAX calls.)
var done = function (html) {
if (!node.preloadAlways) {
node.preloadState = "DONE";
}
if (attr(node, "preload-images") == "true") {
document.createElement("div").innerHTML = html; // create and populate a node to load linked resources, too.
}
};
return function () {
// If this value has already been loaded, then do not try again.
if (node.preloadState !== "READY") {
return;
}
// Special handling for HX-GET - use built-in htmx.ajax function
// so that headers match other htmx requests, then set
// node.preloadState = TRUE so that requests are not duplicated
// in the future
var hxGet =
node.getAttribute("hx-get") || node.getAttribute("data-hx-get");
if (hxGet) {
htmx.ajax("GET", hxGet, {
source: node,
handler: function (elt, info) {
done(info.xhr.responseText);
},
});
return;
}
// Otherwise, perform a standard xhr request, then set
// node.preloadState = TRUE so that requests are not duplicated
// in the future.
if (node.getAttribute("href")) {
var r = new XMLHttpRequest();
r.open("GET", node.getAttribute("href"));
r.onload = function () {
done(r.responseText);
};
r.send();
return;
}
};
};
// This function processes a specific node and sets up event handlers.
// We'll search for nodes and use it below.
var init = function (node) {
// If this node DOES NOT include a "GET" transaction, then there's nothing to do here.
if (
node.getAttribute("href") +
node.getAttribute("hx-get") +
node.getAttribute("data-hx-get") ==
""
) {
return;
}
// Guarantee that we only initialize each node once.
if (node.preloadState !== undefined) {
return;
}
// Get event name from config.
var on = attr(node, "preload") || "mousedown";
const always = on.indexOf("always") !== -1;
if (always) {
on = on.replace("always", "").trim();
}
// FALL THROUGH to here means we need to add an EventListener
// Apply the listener to the node
node.addEventListener(on, function (evt) {
if (node.preloadState === "PAUSE") {
// Only add one event listener
node.preloadState = "READY"; // Required for the `load` function to trigger
// Special handling for "mouseover" events. Wait 100ms before triggering load.
if (on === "mouseover") {
window.setTimeout(load(node), 100);
} else {
load(node)(); // all other events trigger immediately.
}
}
});
// Special handling for certain built-in event handlers
switch (on) {
case "mouseover":
// Mirror `touchstart` events (fires immediately)
node.addEventListener("touchstart", load(node));
// WHhen the mouse leaves, immediately disable the preload
node.addEventListener("mouseout", function (evt) {
if (evt.target === node && node.preloadState === "READY") {
node.preloadState = "PAUSE";
}
});
break;
case "mousedown":
// Mirror `touchstart` events (fires immediately)
node.addEventListener("touchstart", load(node));
break;
}
// Mark the node as ready to run.
node.preloadState = "PAUSE";
node.preloadAlways = always;
htmx.trigger(node, "preload:init"); // This event can be used to load content immediately.
};
// Search for all child nodes that have a "preload" attribute
event.target.querySelectorAll("[preload]").forEach(function (node) {
// Initialize the node with the "preload" attribute
init(node);
// Initialize all child elements that are anchors or have `hx-get` (use with care)
node.querySelectorAll("a,[hx-get],[data-hx-get]").forEach(init);
});
},
});
================================================
FILE: src/static/output/prism.css
================================================
/* PrismJS 1.29.0
https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+python&plugins=line-numbers+file-highlight+toolbar+copy-to-clipboard */
code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8292a2}.token.punctuation{color:#f8f8f2}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a6e22e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#e6db74}.token.keyword{color:#66d9ef}.token.important,.token.regex{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}
div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;z-index:10;top:.3em;right:.2em;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,.2);box-shadow:0 2px 0 0 rgba(0,0,0,.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover{color:inherit;text-decoration:none}
================================================
FILE: src/static/output/prism.js
================================================
/* PrismJS 1.29.0
https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+python&plugins=line-numbers+file-highlight+normalize-whitespace+toolbar+copy-to-clipboard */
var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(n,t){var r,i;switch(t=t||{},a.util.type(n)){case"Object":if(i=a.util.objId(n),t[i])return t[i];for(var l in r={},t[i]=r,n)n.hasOwnProperty(l)&&(r[l]=e(n[l],t));return r;case"Array":return i=a.util.objId(n),t[i]?t[i]:(r=[],t[i]=r,n.forEach((function(n,a){r[a]=e(n,t)})),r);default:return n}},getLanguage:function(e){for(;e;){var t=n.exec(e.className);if(t)return t[1].toLowerCase();e=e.parentElement}return"none"},setLanguage:function(e,t){e.className=e.className.replace(RegExp(n,"gi"),""),e.classList.add("language-"+t)},currentScript:function(){if("undefined"==typeof document)return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(r){var e=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(r.stack)||[])[1];if(e){var n=document.getElementsByTagName("script");for(var t in n)if(n[t].src==e)return n[t]}return null}},isActive:function(e,n,t){for(var r="no-"+n;e;){var a=e.classList;if(a.contains(n))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!t}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(e,n){var t=a.util.clone(a.languages[e]);for(var r in n)t[r]=n[r];return t},insertBefore:function(e,n,t,r){var i=(r=r||a.languages)[e],l={};for(var o in i)if(i.hasOwnProperty(o)){if(o==n)for(var s in t)t.hasOwnProperty(s)&&(l[s]=t[s]);t.hasOwnProperty(o)||(l[o]=i[o])}var u=r[e];return r[e]=l,a.languages.DFS(a.languages,(function(n,t){t===u&&n!=e&&(this[n]=l)})),l},DFS:function e(n,t,r,i){i=i||{};var l=a.util.objId;for(var o in n)if(n.hasOwnProperty(o)){t.call(n,o,n[o],r||o);var s=n[o],u=a.util.type(s);"Object"!==u||i[l(s)]?"Array"!==u||i[l(s)]||(i[l(s)]=!0,e(s,t,o,i)):(i[l(s)]=!0,e(s,t,null,i))}}},plugins:{},highlightAll:function(e,n){a.highlightAllUnder(document,e,n)},highlightAllUnder:function(e,n,t){var r={callback:t,container:e,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};a.hooks.run("before-highlightall",r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),a.hooks.run("before-all-elements-highlight",r);for(var i,l=0;i=r.elements[l++];)a.highlightElement(i,!0===n,r.callback)},highlightElement:function(n,t,r){var i=a.util.getLanguage(n),l=a.languages[i];a.util.setLanguage(n,i);var o=n.parentElement;o&&"pre"===o.nodeName.toLowerCase()&&a.util.setLanguage(o,i);var s={element:n,language:i,grammar:l,code:n.textContent};function u(e){s.highlightedCode=e,a.hooks.run("before-insert",s),s.element.innerHTML=s.highlightedCode,a.hooks.run("after-highlight",s),a.hooks.run("complete",s),r&&r.call(s.element)}if(a.hooks.run("before-sanity-check",s),(o=s.element.parentElement)&&"pre"===o.nodeName.toLowerCase()&&!o.hasAttribute("tabindex")&&o.setAttribute("tabindex","0"),!s.code)return a.hooks.run("complete",s),void(r&&r.call(s.element));if(a.hooks.run("before-highlight",s),s.grammar)if(t&&e.Worker){var c=new Worker(a.filename);c.onmessage=function(e){u(e.data)},c.postMessage(JSON.stringify({language:s.language,code:s.code,immediateClose:!0}))}else u(a.highlight(s.code,s.grammar,s.language));else u(a.util.encode(s.code))},highlight:function(e,n,t){var r={code:e,grammar:n,language:t};if(a.hooks.run("before-tokenize",r),!r.grammar)throw new Error('The language "'+r.language+'" has no grammar.');return r.tokens=a.tokenize(r.code,r.grammar),a.hooks.run("after-tokenize",r),i.stringify(a.util.encode(r.tokens),r.language)},tokenize:function(e,n){var t=n.rest;if(t){for(var r in t)n[r]=t[r];delete n.rest}var a=new s;return u(a,a.head,e),o(e,a,n,a.head,0),function(e){for(var n=[],t=e.head.next;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=a.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=a.hooks.all[e];if(t&&t.length)for(var r,i=0;r=t[i++];)r(n)}},Token:i};function i(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function l(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function o(e,n,t,r,s,g){for(var f in t)if(t.hasOwnProperty(f)&&t[f]){var h=t[f];h=Array.isArray(h)?h:[h];for(var d=0;d<h.length;++d){if(g&&g.cause==f+","+d)return;var v=h[d],p=v.inside,m=!!v.lookbehind,y=!!v.greedy,k=v.alias;if(y&&!v.pattern.global){var x=v.pattern.toString().match(/[imsuy]*$/)[0];v.pattern=RegExp(v.pattern.source,x+"g")}for(var b=v.pattern||v,w=r.next,A=s;w!==n.tail&&!(g&&A>=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(j<O||"string"==typeof C.value);C=C.next)L++,j+=C.value.length;L--,E=e.slice(A,j),P.index-=A}else if(!(P=l(b,0,E,m)))continue;S=P.index;var N=P[0],_=E.slice(0,S),M=E.slice(S+N.length),W=A+E.length;g&&W>g.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;n.next=r,r.prev=n,e.length-=a}if(e.Prism=a,i.stringify=function e(n,t){if("string"==typeof n)return n;if(Array.isArray(n)){var r="";return n.forEach((function(n){r+=e(n,t)})),r}var i={type:n.type,content:e(n.content,t),tag:"span",classes:["token",n.type],attributes:{},language:t},l=n.alias;l&&(Array.isArray(l)?Array.prototype.push.apply(i.classes,l):i.classes.push(l)),a.hooks.run("wrap",i);var o="";for(var s in i.attributes)o+=" "+s+'="'+(i.attributes[s]||"").replace(/"/g,""")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+o+">"+i.content+"</"+i.tag+">"},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^<!\[CDATA\[|\]\]>$/i;var t={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[^])*?(?=</__>)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;
!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+e.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism);
Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript;
Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern://,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python;
!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e="line-numbers",n=/\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(n,t){if("PRE"===n.tagName&&n.classList.contains(e)){var i=n.querySelector(".line-numbers-rows");if(i){var r=parseInt(n.getAttribute("data-start"),10)||1,s=r+(i.children.length-1);t<r&&(t=r),t>s&&(t=s);var l=t-r;return i.children[l]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},i=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&i===window.innerWidth||(i=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var i=t.element,s=i.parentNode;if(s&&/pre/i.test(s.nodeName)&&!i.querySelector(".line-numbers-rows")&&Prism.util.isActive(i,e)){i.classList.remove(e),s.classList.add(e);var l,o=t.code.match(n),a=o?o.length+1:1,u=new Array(a+1).join("<span></span>");(l=document.createElement("span")).setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=u,s.hasAttribute("data-start")&&(s.style.counterReset="linenumber "+(parseInt(s.getAttribute("data-start"),10)-1)),t.element.appendChild(l),r([s]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getComputedStyle?getComputedStyle(n):n.currentStyle||null:null)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var t=e.map((function(e){var t=e.querySelector("code"),i=e.querySelector(".line-numbers-rows");if(t&&i){var r=e.querySelector(".line-numbers-sizer"),s=t.textContent.split(n);r||((r=document.createElement("span")).className="line-numbers-sizer",t.appendChild(r)),r.innerHTML="0",r.style.display="block";var l=r.getBoundingClientRect().height;return r.innerHTML="",{element:e,lines:s,lineHeights:[],oneLinerHeight:l,sizer:r}}})).filter(Boolean);t.forEach((function(e){var n=e.sizer,t=e.lines,i=e.lineHeights,r=e.oneLinerHeight;i[t.length-1]=void 0,t.forEach((function(e,t){if(e&&e.length>1){var s=n.appendChild(document.createElement("span"));s.style.display="block",s.textContent=e}else i[t]=r}))})),t.forEach((function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;r<t.length;r++)void 0===t[r]&&(t[r]=n.children[i++].getBoundingClientRect().height)})),t.forEach((function(e){var n=e.sizer,t=e.element.querySelector(".line-numbers-rows");n.style.display="none",n.innerHTML="",e.lineHeights.forEach((function(e,n){t.children[n].style.height=e+"px"}))}))}}}();
!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var t={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},e="data-src-status",i='pre[data-src]:not([data-src-status="loaded"]):not([data-src-status="loading"])';Prism.hooks.add("before-highlightall",(function(t){t.selector+=", "+i})),Prism.hooks.add("before-sanity-check",(function(a){var n=a.element;if(n.matches(i)){a.code="",n.setAttribute(e,"loading");var s=n.appendChild(document.createElement("CODE"));s.textContent="Loading…";var r=n.getAttribute("data-src"),l=a.language;if("none"===l){var o=(/\.(\w+)$/.exec(r)||[,"none"])[1];l=t[o]||o}Prism.util.setLanguage(s,l),Prism.util.setLanguage(n,l);var h=Prism.plugins.autoloader;h&&h.loadLanguages(l),function(t,i,a){var r=new XMLHttpRequest;r.open("GET",t,!0),r.onreadystatechange=function(){4==r.readyState&&(r.status<400&&r.responseText?function(t){n.setAttribute(e,"loaded");var i=function(t){var e=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(t||"");if(e){var i=Number(e[1]),a=e[2],n=e[3];return a?n?[i,Number(n)]:[i,void 0]:[i,i]}}(n.getAttribute("data-range"));if(i){var a=t.split(/\r\n?|\n/g),r=i[0],l=null==i[1]?a.length:i[1];r<0&&(r+=a.length),r=Math.max(0,Math.min(r-1,a.length)),l<0&&(l+=a.length),l=Math.max(0,Math.min(l,a.length)),t=a.slice(r,l).join("\n"),n.hasAttribute("data-start")||n.setAttribute("data-start",String(r+1))}s.textContent=t,Prism.highlightElement(s)}(r.responseText):r.status>=400?a("✖ Error "+r.status+" while fetching file: "+r.statusText):a("✖ Error: File does not exist or is empty"))},r.send(null)}(r,0,(function(t){n.setAttribute(e,"failed"),s.textContent=t}))}})),Prism.plugins.fileHighlight={highlight:function(t){for(var e,a=(t||document).querySelectorAll(i),n=0;e=a[n++];)Prism.highlightElement(e)}};var a=!1;Prism.fileHighlight=function(){a||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),a=!0),Prism.plugins.fileHighlight.highlight.apply(this,arguments)}}}();
!function(){if("undefined"!=typeof Prism){var e=Object.assign||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},t={"remove-trailing":"boolean","remove-indent":"boolean","left-trim":"boolean","right-trim":"boolean","break-lines":"number",indent:"number","remove-initial-line-feed":"boolean","tabs-to-spaces":"number","spaces-to-tabs":"number"};n.prototype={setDefaults:function(t){this.defaults=e(this.defaults,t)},normalize:function(t,n){for(var r in n=e(this.defaults,n)){var i=r.replace(/-(\w)/g,(function(e,t){return t.toUpperCase()}));"normalize"!==r&&"setDefaults"!==i&&n[r]&&this[i]&&(t=this[i].call(this,t,n[r]))}return t},leftTrim:function(e){return e.replace(/^\s+/,"")},rightTrim:function(e){return e.replace(/\s+$/,"")},tabsToSpaces:function(e,t){return t=0|t||4,e.replace(/\t/g,new Array(++t).join(" "))},spacesToTabs:function(e,t){return t=0|t||4,e.replace(RegExp(" {"+t+"}","g"),"\t")},removeTrailing:function(e){return e.replace(/\s*?$/gm,"")},removeInitialLineFeed:function(e){return e.replace(/^(?:\r?\n|\r)/,"")},removeIndent:function(e){var t=e.match(/^[^\S\n\r]*(?=\S)/gm);return t&&t[0].length?(t.sort((function(e,t){return e.length-t.length})),t[0].length?e.replace(RegExp("^"+t[0],"gm"),""):e):e},indent:function(e,t){return e.replace(/^[^\S\n\r]*(?=\S)/gm,new Array(++t).join("\t")+"$&")},breakLines:function(e,t){t=!0===t?80:0|t||80;for(var n=e.split("\n"),i=0;i<n.length;++i)if(!(r(n[i])<=t)){for(var o=n[i].split(/(\s+)/g),a=0,l=0;l<o.length;++l){var s=r(o[l]);(a+=s)>t&&(o[l]="\n"+o[l],a=s)}n[i]=o.join("")}return n.join("\n")}},"undefined"!=typeof module&&module.exports&&(module.exports=n),Prism.plugins.NormalizeWhitespace=new n({"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),Prism.hooks.add("before-sanity-check",(function(e){var n=Prism.plugins.NormalizeWhitespace;if((!e.settings||!1!==e.settings["whitespace-normalization"])&&Prism.util.isActive(e.element,"whitespace-normalization",!0))if(e.element&&e.element.parentNode||!e.code){var r=e.element.parentNode;if(e.code&&r&&"pre"===r.nodeName.toLowerCase()){for(var i in null==e.settings&&(e.settings={}),t)if(Object.hasOwnProperty.call(t,i)){var o=t[i];if(r.hasAttribute("data-"+i))try{var a=JSON.parse(r.getAttribute("data-"+i)||"true");typeof a===o&&(e.settings[i]=a)}catch(e){}}for(var l=r.childNodes,s="",c="",u=!1,m=0;m<l.length;++m){var f=l[m];f==e.element?u=!0:"#text"===f.nodeName&&(u?c+=f.nodeValue:s+=f.nodeValue,r.removeChild(f),--m)}if(e.element.children.length&&Prism.plugins.KeepMarkup){var d=s+e.element.innerHTML+c;e.element.innerHTML=n.normalize(d,e.settings),e.code=e.element.textContent}else e.code=s+e.code+c,e.code=n.normalize(e.code,e.settings)}}else e.code=n.normalize(e.code,e.settings)}))}function n(t){this.defaults=e({},t)}function r(e){for(var t=0,n=0;n<e.length;++n)e.charCodeAt(n)=="\t".charCodeAt(0)&&(t+=3);return e.length+t}}();
!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e=[],t={},n=function(){};Prism.plugins.toolbar={};var a=Prism.plugins.toolbar.registerButton=function(n,a){var r;r="function"==typeof a?a:function(e){var t;return"function"==typeof a.onClick?((t=document.createElement("button")).type="button",t.addEventListener("click",(function(){a.onClick.call(this,e)}))):"string"==typeof a.url?(t=document.createElement("a")).href=a.url:t=document.createElement("span"),a.className&&t.classList.add(a.className),t.textContent=a.text,t},n in t?console.warn('There is a button with the key "'+n+'" registered already.'):e.push(t[n]=r)},r=Prism.plugins.toolbar.hook=function(a){var r=a.element.parentNode;if(r&&/pre/i.test(r.nodeName)&&!r.parentNode.classList.contains("code-toolbar")){var o=document.createElement("div");o.classList.add("code-toolbar"),r.parentNode.insertBefore(o,r),o.appendChild(r);var i=document.createElement("div");i.classList.add("toolbar");var l=e,d=function(e){for(;e;){var t=e.getAttribute("data-toolbar-order");if(null!=t)return(t=t.trim()).length?t.split(/\s*,\s*/g):[];e=e.parentElement}}(a.element);d&&(l=d.map((function(e){return t[e]||n}))),l.forEach((function(e){var t=e(a);if(t){var n=document.createElement("div");n.classList.add("toolbar-item"),n.appendChild(t),i.appendChild(n)}})),o.appendChild(i)}};a("label",(function(e){var t=e.element.parentNode;if(t&&/pre/i.test(t.nodeName)&&t.hasAttribute("data-label")){var n,a,r=t.getAttribute("data-label");try{a=document.querySelector("template#"+r)}catch(e){}return a?n=a.content:(t.hasAttribute("data-url")?(n=document.createElement("a")).href=t.getAttribute("data-url"):n=document.createElement("span"),n.textContent=r),n}})),Prism.hooks.add("complete",r)}}();
!function(){function t(t){var e=document.createElement("textarea");e.value=t.getText(),e.style.top="0",e.style.left="0",e.style.position="fixed",document.body.appendChild(e),e.focus(),e.select();try{var o=document.execCommand("copy");setTimeout((function(){o?t.success():t.error()}),1)}catch(e){setTimeout((function(){t.error(e)}),1)}document.body.removeChild(e)}"undefined"!=typeof Prism&&"undefined"!=typeof document&&(Prism.plugins.toolbar?Prism.plugins.toolbar.registerButton("copy-to-clipboard",(function(e){var o=e.element,n=function(t){var e={copy:"Copy","copy-error":"Press Ctrl+C to copy","copy-success":"Copied!","copy-timeout":5e3};for(var o in e){for(var n="data-prismjs-"+o,c=t;c&&!c.hasAttribute(n);)c=c.parentElement;c&&(e[o]=c.getAttribute(n))}return e}(o),c=document.createElement("button");c.className="copy-to-clipboard-button",c.setAttribute("type","button");var r=document.createElement("span");return c.appendChild(r),u("copy"),function(e,o){e.addEventListener("click",(function(){!function(e){navigator.clipboard?navigator.clipboard.writeText(e.getText()).then(e.success,(function(){t(e)})):t(e)}(o)}))}(c,{getText:function(){return o.textContent},success:function(){u("copy-success"),i()},error:function(){u("copy-error"),setTimeout((function(){!function(t){window.getSelection().selectAllChildren(t)}(o)}),1),i()}}),c;function i(){setTimeout((function(){u("copy")}),n["copy-timeout"])}function u(t){r.textContent=n[t],c.setAttribute("data-copy-state",t)}})):console.warn("Copy to Clipboard plugin loaded before Toolbar plugin."))}();
================================================
FILE: src/static/output/sse.js
================================================
================================================
FILE: src/static/output/style.css
================================================
/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}.tooltip-arrow,.tooltip-arrow:before{position:absolute;width:8px;height:8px;background:inherit}.tooltip-arrow{visibility:hidden}.tooltip-arrow:before{content:"";visibility:visible;transform:rotate(45deg)}[data-tooltip-style^=light]+.tooltip>.tooltip-arrow:before{border-style:solid;border-color:#e5e7eb}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=top]>.tooltip-arrow:before{border-bottom-width:1px;border-right-width:1px}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=right]>.tooltip-arrow:before{border-bottom-width:1px;border-left-width:1px}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=bottom]>.tooltip-arrow:before{border-top-width:1px;border-left-width:1px}[data-tooltip-style^=light]+.tooltip[data-popper-placement^=left]>.tooltip-arrow:before{border-top-width:1px;border-right-width:1px}.tooltip[data-popper-placement^=top]>.tooltip-arrow{bottom:-4px}.tooltip[data-popper-placement^=bottom]>.tooltip-arrow{top:-4px}.tooltip[data-popper-placement^=left]>.tooltip-arrow{right:-4px}.tooltip[data-popper-placement^=right]>.tooltip-arrow{left:-4px}.tooltip.invisible>.tooltip-arrow:before{visibility:hidden}[data-popper-arrow],[data-popper-arrow]:before{position:absolute;width:8px;height:8px;background:inherit}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:after,[data-popper-arrow]:before{content:"";visibility:visible;transform:rotate(45deg)}[data-popper-arrow]:after{position:absolute;width:9px;height:9px;background:inherit}[role=tooltip]>[data-popper-arrow]:before{border-style:solid;border-color:#e5e7eb}.dark [role=tooltip]>[data-popper-arrow]:before{border-style:solid;border-color:#4b5563}[role=tooltip]>[data-popper-arrow]:after{border-style:solid;border-color:#e5e7eb}.dark [role=tooltip]>[data-popper-arrow]:after{border-style:solid;border-color:#4b5563}[data-popover][role=tooltip][data-popper-placement^=top]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom-width:1px;border-right-width:1px}[data-popover][role=tooltip][data-popper-placement^=right]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom-width:1px;border-left-width:1px}[data-popover][role=tooltip][data-popper-placement^=bottom]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=bottom]>[data-popper-arrow]:before{border-top-width:1px;border-left-width:1px}[data-popover][role=tooltip][data-popper-placement^=left]>[data-popper-arrow]:after,[data-popover][role=tooltip][data-popper-placement^=left]>[data-popper-arrow]:before{border-top-width:1px;border-right-width:1px}[data-popover][role=tooltip][data-popper-placement^=top]>[data-popper-arrow]{bottom:-5px}[data-popover][role=tooltip][data-popper-placement^=bottom]>[data-popper-arrow]{top:-5px}[data-popover][role=tooltip][data-popper-placement^=left]>[data-popper-arrow]{right:-5px}[data-popover][role=tooltip][data-popper-placement^=right]>[data-popper-arrow]{left:-5px}[role=tooltip].invisible>[data-popper-arrow]:after,[role=tooltip].invisible>[data-popper-arrow]:before{visibility:hidden}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow:0 0 #0000}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#1c64f2;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#1c64f2}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}select:not([size]){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' aria-hidden='true' viewBox='0 0 10 6'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m1 1 4 4 4-4'/%3E%3C/svg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:.75em .75em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}:is([dir=rtl]) select:not([size]){background-position:left .75rem center;padding-right:.75rem;padding-left:0}[multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#1c64f2;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#1c64f2;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark [type=checkbox]:checked,.dark [type=radio]:checked,[type=checkbox]:checked,[type=radio]:checked{border-color:#0000;background-color:currentColor;background-size:.55em .55em;background-position:50%;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' aria-hidden='true' viewBox='0 0 16 12'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M1 5.917 5.724 10.5 15 1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:.55em .55em;-webkit-print-color-adjust:exact;print-color-adjust:exact}.dark [type=radio]:checked,[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-size:1em 1em}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' aria-hidden='true' viewBox='0 0 16 12'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M1 5.917 5.724 10.5 15 1.5'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:.55em .55em;-webkit-print-color-adjust:exact;print-color-adjust:exact}[type=checkbox]:indeterminate,[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px auto inherit}input[type=file]::file-selector-button{color:#fff;background:#1f2937;border:0;font-weight:500;font-size:.875rem;cursor:pointer;padding:.625rem 1rem .625rem 2rem;margin-inline-start:-1rem;margin-inline-end:1rem}input[type=file]::file-selector-button:hover{background:#374151}:is([dir=rtl]) input[type=file]::file-selector-button{padding-right:2rem;padding-left:1rem}.dark input[type=file]::file-selector-button{color:#fff;background:#4b5563}.dark input[type=file]::file-selector-button:hover{background:#6b7280}input[type=range]::-webkit-slider-thumb{height:1.25rem;width:1.25rem;background:#1c64f2;border-radius:9999px;border:0;appearance:none;-moz-appearance:none;-webkit-appearance:none;cursor:pointer}input[type=range]:disabled::-webkit-slider-thumb{background:#9ca3af}.dark input[type=range]:disabled::-webkit-slider-thumb{background:#6b7280}input[type=range]:focus::-webkit-slider-thumb{outline:2px solid #0000;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1px;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity))}input[type=range]::-moz-range-thumb{height:1.25rem;width:1.25rem;background:#1c64f2;border-radius:9999px;border:0;appearance:none;-moz-appearance:none;-webkit-appearance:none;cursor:pointer}input[type=range]:disabled::-moz-range-thumb{background:#9ca3af}.dark input[type=range]:disabled::-moz-range-thumb{background:#6b7280}input[type=range]::-moz-range-progress{background:#3f83f8}input[type=range]::-ms-fill-lower{background:#3f83f8}.toggle-bg:after{content:"";position:absolute;top:.125rem;left:.125rem;background:#fff;border-color:#d1d5db;border-width:1px;border-radius:9999px;height:1.25rem;width:1.25rem;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;box-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}input:checked+.toggle-bg:after{transform:translateX(100%);;border-color:#fff}input:checked+.toggle-bg{background:#1c64f2;border-color:#1c64f2}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3f83f880;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.apexcharts-canvas .apexcharts-tooltip{background-color:#fff;color:#6b7280;border:0!important;border-radius:.25rem;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.dark .apexcharts-canvas .apexcharts-tooltip{background-color:#374151;color:#9ca3af;border-color:#0000;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-title{padding:.5rem .75rem;margin-bottom:.75rem;background-color:#f3f4f6;border-bottom-color:#e5e7eb;font-size:.875rem!important;font-weight:400;color:#6b7280}.dark .apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-title{background-color:#4b5563;border-color:#6b7280;color:#9ca3af}.apexcharts-canvas .apexcharts-xaxistooltip{color:#6b7280;padding:.5rem .75rem;border-color:#0000;background-color:#fff;border-radius:.25rem;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.dark .apexcharts-canvas .apexcharts-xaxistooltip{color:#9ca3af;background-color:#374151}.apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-text-y-label{color:#6b7280;font-size:.875rem}.dark .apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-text-y-label{color:#9ca3af}.apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-text-y-value{color:#111827;font-size:.875rem}:is([dir=rtl]) .apexcharts-tooltip .apexcharts-tooltip-marker{margin-right:0;margin-left:e}.dark .apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-text-y-value{color:#fff}.apexcharts-canvas .apexcharts-xaxistooltip-text{font-weight:400;font-size:.875rem!important}.apexcharts-canvas .apexcharts-xaxistooltip:after,.apexcharts-canvas .apexcharts-xaxistooltip:before{border-bottom-color:#fff}.apexcharts-canvas .apexcharts-xaxistooltip:after{border-width:8px;margin-left:-8px}.apexcharts-canvas .apexcharts-xaxistooltip:before{border-width:10px;margin-left:-10px}.dark .apexcharts-canvas .apexcharts-xaxistooltip:after,.dark .apexcharts-canvas .apexcharts-xaxistooltip:before{border-bottom-color:#374151}.apexcharts-canvas .apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-y-group{padding:0}.apexcharts-canvas .apexcharts-tooltip-series-group.apexcharts-active{padding-left:.75rem;padding-right:.75rem;padding-bottom:.75rem;background-color:#fff!important;color:#6b7280!important}.dark .apexcharts-canvas .apexcharts-tooltip-series-group.apexcharts-active{background-color:#374151!important;color:#9ca3af!important}.apexcharts-canvas .apexcharts-tooltip-series-group.apexcharts-active:first-of-type{padding-top:.75rem}.apexcharts-canvas .apexcharts-legend{padding:0!important}.apexcharts-canvas .apexcharts-legend-text{font-size:.75rem;font-weight:500!important;padding-left:1.25rem;color:#6b7280!important}:is([dir=rtl]) .apexcharts-canvas .apexcharts-legend-text{padding-right:.5rem}.apexcharts-canvas .apexcharts-legend-text:not(.apexcharts-inactive-legend):hover{color:#111827!important}.dark .apexcharts-canvas .apexcharts-legend-text{color:#9ca3af!important}.dark .apexcharts-canvas .apexcharts-legend-text:not(.apexcharts-inactive-legend):hover{color:#fff!important}.apexcharts-canvas .apexcharts-legend-series{margin-left:.5rem;margin-right:.5rem;margin-bottom:.25rem!important;display:flex;align-items:center}.apexcharts-datalabels-group .apexcharts-text.apexcharts-datalabel-value{fill:#111827!important;font-size:1.875rem;font-weight:700}.dark .apexcharts-canvas .apexcharts-datalabels-group .apexcharts-text.apexcharts-datalabel-value{fill:#fff!important}.apexcharts-canvas .apexcharts-datalabels-group .apexcharts-text.apexcharts-datalabel-label{fill:#6b7280!important;font-size:1rem;font-weight:400}.dark .apexcharts-canvas .apexcharts-datalabels-group .apexcharts-text.apexcharts-datalabel-label{fill:#9ca3af!important}.apexcharts-canvas .apexcharts-datalabels .apexcharts-text.apexcharts-pie-label{font-size:.75rem!important;font-weight:600!important;text-shadow:none!important;filter:none!important}.apexcharts-gridline,.apexcharts-xcrosshairs,.apexcharts-ycrosshairs{stroke:#e5e7eb!important}.dark .apexcharts-gridline,.dark .apexcharts-xcrosshairs,.dark .apexcharts-ycrosshairs{stroke:#374151!important}.format{color:var(--tw-format-body);max-width:65ch}.format :where([class~=lead]):not(:where([class~=not-format] *)){color:var(--tw-format-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.format :where(a):not(:where([class~=not-format] *)){color:var(--tw-format-links);text-decoration:underline;font-weight:500}.format :where(a):not(:where([class~=not-format] *)):hover{text-decoration:none}.format :where(strong):not(:where([class~=not-format] *)){color:var(--tw-format-bold);font-weight:700}.format :where(a strong):not(:where([class~=not-format] *)){color:inherit}.format :where(blockquote strong):not(:where([class~=not-format] *)){color:inherit}.format :where(thead th strong):not(:where([class~=not-format] *)){color:inherit}.format :where(ol):not(:where([class~=not-format] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.format :where(ol[type=A]):not(:where([class~=not-format] *)){list-style-type:upper-alpha}.format :where(ol[type=a]):not(:where([class~=not-format] *)){list-style-type:lower-alpha}.format :where(ol[type=A s]):not(:where([class~=not-format] *)){list-style-type:upper-alpha}.format :where(ol[type=a s]):not(:where([class~=not-format] *)){list-style-type:lower-alpha}.format :where(ol[type=I]):not(:where([class~=not-format] *)){list-style-type:upper-roman}.format :where(ol[type=i]):not(:where([class~=not-format] *)){list-style-type:lower-roman}.format :where(ol[type=I s]):not(:where([class~=not-format] *)){list-style-type:upper-roman}.format :where(ol[type=i s]):not(:where([class~=not-format] *)){list-style-type:lower-roman}.format :where(ol[type="1"]):not(:where([class~=not-format] *)){list-style-type:decimal}.format :where(ul):not(:where([class~=not-format] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.format :where(ol>li):not(:where([class~=not-format] *))::marker{font-weight:400;color:var(--tw-format-counters)}.format :where(ul>li):not(:where([class~=not-format] *))::marker{color:var(--tw-format-bullets)}.format :where(hr):not(:where([class~=not-format] *)){border-color:var(--tw-format-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.format :where(blockquote):not(:where([class~=not-format] *)){font-size:1.1111111em;font-weight:700;font-style:italic;color:var(--tw-format-quotes);quotes:"\201C""\201D""\2018""\2019";margin-bottom:1.6em}.format :where(blockquote):not(:where([class~=not-format] *)):before{content:"";background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='24' fill='none'%3E%3Cpath fill='%239CA3AF' d='M18.69 24v-9.855C18.69 6.54 23.663 1.385 30.666 0l1.326 2.868c-3.242 1.223-5.326 4.85-5.326 7.799H32V24H18.69ZM0 24v-9.855C0 6.54 4.997 1.384 12 0l1.328 2.868C10.084 4.091 8 7.718 8 10.667h5.31V24H0Z'/%3E%3C/svg%3E");background-repeat:no-repeat;color:var(--tw-format-quotes);width:1.7777778em;height:1.3333333em;display:block;margin-top:1.6em}.format :where(blockquote p:first-of-type):not(:where([class~=not-format] *)):before{content:open-quote}.format :where(blockquote p:last-of-type):not(:where([class~=not-format] *)):after{content:close-quote}.format :where(h1):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.format :where(h1 strong):not(:where([class~=not-format] *)){font-weight:900;color:inherit}.format :where(h2):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-weight:700;font-size:1.5em;margin-top:0;margin-bottom:1em;line-height:1.3333333}.format :where(h2 strong):not(:where([class~=not-format] *)){font-weight:800;color:inherit}.format :where(h3):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-weight:700;font-size:1.25em;margin-top:0;margin-bottom:.6em;line-height:1.6}.format :where(h3 strong):not(:where([class~=not-format] *)){font-weight:800;color:inherit}.format :where(h4):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-weight:600;margin-top:0;margin-bottom:.5em;line-height:1.5}.format :where(h4 strong):not(:where([class~=not-format] *)){font-weight:700;color:inherit}.format :where(img):not(:where([class~=not-format] *)){margin-top:2em;margin-bottom:2em}.format :where(figure>*):not(:where([class~=not-format] *)){margin-top:0;margin-bottom:0}.format :where(figcaption):not(:where([class~=not-format] *)){color:var(--tw-format-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.format :where(code):not(:where([class~=not-format] *)){color:var(--tw-format-code);font-weight:600;background-color:var(--tw-format-code-bg);padding:.3333333em .5555556em;border-radius:.2222222em;font-size:.875em}.format :where(a code):not(:where([class~=not-format] *)){color:inherit}.format :where(h1 code):not(:where([class~=not-format] *)){color:inherit}.format :where(h2 code):not(:where([class~=not-format] *)){color:inherit;font-size:.875em}.format :where(h3 code):not(:where([class~=not-format] *)){color:inherit;font-size:.9em}.format :where(h4 code):not(:where([class~=not-format] *)){color:inherit}.format :where(blockquote code):not(:where([class~=not-format] *)){color:inherit}.format :where(thead th code):not(:where([class~=not-format] *)){color:inherit}.format :where(pre):not(:where([class~=not-format] *)){color:var(--tw-format-pre-code);background-color:var(--tw-format-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.format :where(pre code):not(:where([class~=not-format] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.format :where(pre code):not(:where([class~=not-format] *)):before{content:none}.format :where(pre code):not(:where([class~=not-format] *)):after{content:none}.format :where(table):not(:where([class~=not-format] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.format :where(thead):not(:where([class~=not-format] *)){background-color:var(--tw-format-th-bg);border-radius:.2777778em}.format :where(thead th):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-weight:600;vertical-align:bottom;padding:.5555556em .5714286em .5714286em}.format :where(tbody tr):not(:where([class~=not-format] *)){border-bottom-width:1px;border-bottom-color:var(--tw-format-td-borders)}.format :where(tbody tr:last-child):not(:where([class~=not-format] *)){border-bottom-width:0}.format :where(tbody td):not(:where([class~=not-format] *)){vertical-align:initial}.format :where(tfoot):not(:where([class~=not-format] *)){border-top-width:1px;border-top-color:var(--tw-format-th-borders)}.format :where(tfoot td):not(:where([class~=not-format] *)){vertical-align:top}.format{--tw-format-body:#6b7280;--tw-format-headings:#111827;--tw-format-lead:#6b7280;--tw-format-links:#4b5563;--tw-format-bold:#111827;--tw-format-counters:#6b7280;--tw-format-bullets:#6b7280;--tw-format-hr:#e5e7eb;--tw-format-quotes:#111827;--tw-format-quote-borders:#e5e7eb;--tw-format-captions:#6b7280;--tw-format-code:#111827;--tw-format-code-bg:#f3f4f6;--tw-format-pre-code:#4b5563;--tw-format-pre-bg:#f3f4f6;--tw-format-th-borders:#e5e7eb;--tw-format-th-bg:#f9fafb;--tw-format-td-borders:#e5e7eb;--tw-format-invert-body:#9ca3af;--tw-format-invert-headings:#fff;--tw-format-invert-lead:#9ca3af;--tw-format-invert-links:#fff;--tw-format-invert-bold:#fff;--tw-format-invert-counters:#9ca3af;--tw-format-invert-bullets:#4b5563;--tw-format-invert-hr:#374151;--tw-format-invert-quotes:#f3f4f6;--tw-format-invert-quote-borders:#374151;--tw-format-invert-captions:#9ca3af;--tw-format-invert-code:#fff;--tw-format-invert-code-bg:#1f2937;--tw-format-invert-pre-code:#d1d5db;--tw-format-invert-pre-bg:#374151;--tw-format-invert-th-borders:#4b5563;--tw-format-invert-td-borders:#374151;--tw-format-invert-th-bg:#374151;font-size:1rem;line-height:1.75}.format :where(p):not(:where([class~=not-format] *)){margin-top:1.25em;margin-bottom:1.25em}.format :where(blockquote>p:first-child):not(:where([class~=not-format] *)){margin-top:0}.format :where(video):not(:where([class~=not-format] *)){margin-top:2em;margin-bottom:2em}.format :where(figure):not(:where([class~=not-format] *)){margin-top:2em;margin-bottom:2em}.format :where(li):not(:where([class~=not-format] *)){margin-top:.5em;margin-bottom:.5em}.format :where(ol>li):not(:where([class~=not-format] *)){padding-left:.375em}.format :where(ul>li):not(:where([class~=not-format] *)){padding-left:.375em}.format :where(.format>ul>li p):not(:where([class~=not-format] *)){margin-top:.75em;margin-bottom:.75em}.format :where(.format>ul>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}.format :where(.format>ul>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}.format :where(.format>ol>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}.format :where(.format>ol>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}.format :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-format] *)){margin-top:.75em;margin-bottom:.75em}.format :where(hr+*):not(:where([class~=not-format] *)){margin-top:0}.format :where(h2+*):not(:where([class~=not-format] *)){margin-top:0}.format :where(h3+*):not(:where([class~=not-format] *)){margin-top:0}.format :where(h4+*):not(:where([class~=not-format] *)){margin-top:0}.format :where(thead th:last-child):not(:where([class~=not-format] *)){padding-right:0}.format :where(tbody td,tfoot td):not(:where([class~=not-format] *)){padding:.5714286em}.format :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-format] *)){padding-right:0}.format :where(.format>:first-child):not(:where([class~=not-format] *)){margin-top:0}.format :where(.format>:last-child):not(:where([class~=not-format] *)){margin-bottom:0}.format-sm :where(.format>ul>li p):not(:where([class~=not-format] *)){margin-top:.5em;margin-bottom:.5em}.format-sm :where(.format>ul>li>:first-child):not(:where([class~=not-format] *)){margin-top:1em}.format-sm :where(.format>ul>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1em}.format-sm :where(.format>ol>li>:first-child):not(:where([class~=not-format] *)){margin-top:1em}.format-sm :where(.format>ol>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1em}.format-sm :where(.format>:first-child):not(:where([class~=not-format] *)){margin-top:0}.format-sm :where(.format>:last-child):not(:where([class~=not-format] *)){margin-bottom:0}.format-base :where(.format>ul>li p):not(:where([class~=not-format] *)){margin-top:.75em;margin-bottom:.75em}.format-base :where(.format>ul>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}.format-base :where(.format>ul>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}.format-base :where(.format>ol>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}.format-base :where(.format>ol>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}.format-base :where(.format>:first-child):not(:where([class~=not-format] *)){margin-top:0}.format-base :where(.format>:last-child):not(:where([class~=not-format] *)){margin-bottom:0}.format-lg :where(.format>ul>li p):not(:where([class~=not-format] *)){margin-top:.8888889em;margin-bottom:.8888889em}.format-lg :where(.format>ul>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.3333333em}.format-lg :where(.format>ul>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.3333333em}.format-lg :where(.format>ol>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.3333333em}.format-lg :where(.format>ol>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.3333333em}.format-lg :where(.format>:first-child):not(:where([class~=not-format] *)){margin-top:0}.format-lg :where(.format>:last-child):not(:where([class~=not-format] *)){margin-bottom:0}.btn-primary{margin-inline-end:.5rem;margin-bottom:.5rem;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity));padding:.625rem 1.25rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-primary:hover{--tw-bg-opacity:1;background-color:rgb(30 66 159/var(--tw-bg-opacity))}.btn-primary:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity))}:is(.dark .btn-primary){--tw-bg-opacity:1;background-color:rgb(28 100 242/var(--tw-bg-opacity))}:is(.dark .btn-primary:hover){--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity))}:is(.dark .btn-primary:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 66 159/var(--tw-ring-opacity))}.btn-primary-small{border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity));padding:.5rem .75rem;text-align:center;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-primary-small:hover{--tw-bg-opacity:1;background-color:rgb(30 66 159/var(--tw-bg-opacity))}.btn-primary-small:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity))}:is(.dark .btn-primary-small){--tw-bg-opacity:1;background-color:rgb(28 100 242/var(--tw-bg-opacity))}:is(.dark .btn-primary-small:hover){--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity))}:is(.dark .btn-primary-small:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 66 159/var(--tw-ring-opacity))}.btn-red-small{border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(200 30 30/var(--tw-bg-opacity));padding:.5rem .75rem;text-align:center;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-red-small:hover{--tw-bg-opacity:1;background-color:rgb(155 28 28/var(--tw-bg-opacity))}.btn-red-small:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(248 180 180/var(--tw-ring-opacity))}:is(.dark .btn-red-small){--tw-bg-opacity:1;background-color:rgb(224 36 36/var(--tw-bg-opacity))}:is(.dark .btn-red-small:hover){--tw-bg-opacity:1;background-color:rgb(200 30 30/var(--tw-bg-opacity))}:is(.dark .btn-red-small:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(155 28 28/var(--tw-ring-opacity))}.btn-secondary{margin-inline-end:.5rem;margin-bottom:.5rem;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(26 86 219/var(--tw-border-opacity));padding:.625rem 1.25rem;text-align:center;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(26 86 219/var(--tw-text-opacity))}.btn-secondary:hover{--tw-bg-opacity:1;background-color:rgb(30 66 159/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-secondary:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity))}:is(.dark .btn-secondary){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity));--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}:is(.dark .btn-secondary:hover){--tw-bg-opacity:1;background-color:rgb(63 131 248/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .btn-secondary:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 66 159/var(--tw-ring-opacity))}.btn-secondary-small{border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(26 86 219/var(--tw-border-opacity));padding:.5rem .75rem;text-align:center;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity:1;color:rgb(26 86 219/var(--tw-text-opacity))}.btn-secondary-small:hover{--tw-bg-opacity:1;background-color:rgb(30 66 159/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-secondary-small:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity))}:is(.dark .btn-secondary-small){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity));--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}:is(.dark .btn-secondary-small:hover){--tw-bg-opacity:1;background-color:rgb(63 131 248/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .btn-secondary-small:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 66 159/var(--tw-ring-opacity))}.label{margin-bottom:.5rem;display:block;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}:is(.dark .label){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.input{display:block;width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));padding:.625rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.input:focus{--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(63 131 248/var(--tw-ring-opacity))}:is(.dark .input){--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .input)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity))}:is(.dark .input)::placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity))}:is(.dark .input:focus){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(63 131 248/var(--tw-ring-opacity))}.input-error{display:block;width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(240 82 82/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(253 242 242/var(--tw-bg-opacity));padding:.625rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(119 29 29/var(--tw-text-opacity))}.input-error::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(200 30 30/var(--tw-placeholder-opacity))}.input-error::placeholder{--tw-placeholder-opacity:1;color:rgb(200 30 30/var(--tw-placeholder-opacity))}.input-error:focus{--tw-border-opacity:1;border-color:rgb(240 82 82/var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(240 82 82/var(--tw-ring-opacity))}:is(.dark .input-error){--tw-border-opacity:1;border-color:rgb(240 82 82/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(240 82 82/var(--tw-text-opacity))}:is(.dark .input-error)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(240 82 82/var(--tw-placeholder-opacity))}:is(.dark .input-error)::placeholder{--tw-placeholder-opacity:1;color:rgb(240 82 82/var(--tw-placeholder-opacity))}.disabled-input{margin-bottom:1.25rem;display:block;width:100%;cursor:not-allowed;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));padding:.625rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.disabled-input:focus{--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(63 131 248/var(--tw-ring-opacity))}:is(.dark .disabled-input){--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}:is(.dark .disabled-input)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity))}:is(.dark .disabled-input)::placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity))}:is(.dark .disabled-input:focus){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(63 131 248/var(--tw-ring-opacity))}.link{font-weight:500;--tw-text-opacity:1;color:rgb(28 100 242/var(--tw-text-opacity))}.link:hover{text-decoration-line:underline}:is(.dark .link){--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}.form{margin-left:auto;margin-right:auto;min-width:24rem;max-width:24rem}.table{width:100%;text-align:left;font-size:.75rem;line-height:1rem;--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}:is(.dark .table){--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}@media (min-width:640px){.table{font-size:.875rem;line-height:1.25rem}}.table:where([dir=rtl],[dir=rtl] *){text-align:right}.thead{background-color:rgb(248 250 252/var(--tw-bg-opacity));font-size:.75rem;line-height:1rem;text-transform:uppercase;color:rgb(51 65 85/var(--tw-text-opacity))}.thead,:is(.dark .thead){--tw-bg-opacity:1;--tw-text-opacity:1}:is(.dark .thead){background-color:rgb(51 65 85/var(--tw-bg-opacity));color:rgb(148 163 184/var(--tw-text-opacity))}.tr{border-bottom-width:1px;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:is(.dark .tr){--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.td-tight{padding:.25rem}@media (min-width:640px){.td-tight{padding:.5rem .75rem}}.td{padding:.5rem .75rem}@media (min-width:640px){.td{padding:1rem 1.5rem}}.th{padding:.375rem .75rem}@media (min-width:640px){.th{padding:.75rem 1.5rem}}.checkbox{height:1rem;width:1rem;border-radius:.25rem;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(28 100 242/var(--tw-text-opacity))}.checkbox:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(63 131 248/var(--tw-ring-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity));--tw-ring-offset-color:#1f2937}:is(.dark .checkbox:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(28 100 242/var(--tw-ring-opacity))}.h3{font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}:is(.dark .h3){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.progress-bar-div{display:flex;width:24rem;flex-direction:column;justify-content:center;text-align:center}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-0{bottom:0}.bottom-\[60px\]{bottom:60px}.left-0{left:0}.right-0{right:0}.start-0{inset-inline-start:0}.top-0{top:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-4{height:1rem}.h-6{height:1.5rem}.h-9{height:2.25rem}.h-\[16px\]{height:16px}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-4{width:1rem}.w-64{width:16rem}.w-\[16px\]{width:16px}.w-\[256px\]{width:256px}.w-full{width:100%}.max-w-screen-xl{max-width:1280px}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-full{--tw-translate-y:-100%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-full{--tw-translate-y:100%}.rotate-180,.translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-lg{border-radius:.5rem}.rounded-e-lg{border-start-end-radius:.5rem;border-end-end-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-s-lg{border-start-start-radius:.5rem;border-end-start-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-b{border-bottom-width:1px}.border-blue-600{--tw-border-opacity:1;border-color:rgb(28 100 242/var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(26 86 219/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900\/50{background-color:#11182780}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/50{background-color:#ffffff80}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pt-2{padding-top:.5rem}.text-center{text-align:center}.font-body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.text-blue-600{--tw-text-opacity:1;color:rgb(28 100 242/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(224 36 36/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(200 30 30/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.outline{outline-style:solid}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@media (min-width:1024px){.lg\:format-lg{font-size:1.125rem;line-height:1.7777778}.lg\:format-lg :where(p):not(:where([class~=not-format] *)){margin-top:1.3333333em;margin-bottom:1.3333333em}.lg\:format-lg :where([class~=lead]):not(:where([class~=not-format] *)){font-size:1.2222222em;line-height:1.4545455;margin-top:1.0909091em;margin-bottom:1.0909091em}.lg\:format-lg :where(blockquote):not(:where([class~=not-format] *)):before{margin-top:1.6666667em}.lg\:format-lg :where(blockquote>p:first-child):not(:where([class~=not-format] *)){margin-top:.5em}.lg\:format-lg :where(h1):not(:where([class~=not-format] *)){font-size:2.6666667em;margin-top:0;margin-bottom:.8333333em;line-height:1}.lg\:format-lg :where(h2):not(:where([class~=not-format] *)){font-size:2em;margin-top:0;margin-bottom:.6666667em;line-height:1.3333333}.lg\:format-lg :where(h3):not(:where([class~=not-format] *)){font-size:1.3333333em;margin-top:0;margin-bottom:.6666667em;line-height:1.5}.lg\:format-lg :where(h4):not(:where([class~=not-format] *)){margin-top:0;margin-bottom:.4444444em;line-height:1.5555556}.lg\:format-lg :where(img):not(:where([class~=not-format] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:format-lg :where(video):not(:where([class~=not-format] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:format-lg :where(figure):not(:where([class~=not-format] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:format-lg :where(figure>*):not(:where([class~=not-format] *)){margin-top:0;margin-bottom:0}.lg\:format-lg :where(figcaption):not(:where([class~=not-format] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.lg\:format-lg :where(code):not(:where([class~=not-format] *)){font-size:.8888889em}.lg\:format-lg :where(h2 code):not(:where([class~=not-format] *)){font-size:.8666667em}.lg\:format-lg :where(h3 code):not(:where([class~=not-format] *)){font-size:.875em}.lg\:format-lg :where(pre):not(:where([class~=not-format] *)){font-size:.8888889em;line-height:1.75;margin-top:2em;margin-bottom:2em;border-radius:.375rem;padding:1em 1.5em}.lg\:format-lg :where(ol):not(:where([class~=not-format] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.5555556em}.lg\:format-lg :where(ul):not(:where([class~=not-format] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.5555556em}.lg\:format-lg :where(li):not(:where([class~=not-format] *)){margin-top:.6666667em;margin-bottom:.6666667em}.lg\:format-lg :where(ol>li):not(:where([class~=not-format] *)){padding-left:.4444444em}.lg\:format-lg :where(ul>li):not(:where([class~=not-format] *)){padding-left:.4444444em}.lg\:format-lg :where(.format>ul>li p):not(:where([class~=not-format] *)){margin-top:.8888889em;margin-bottom:.8888889em}.lg\:format-lg :where(.format>ul>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.3333333em}.lg\:format-lg :where(.format>ul>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.3333333em}.lg\:format-lg :where(.format>ol>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.3333333em}.lg\:format-lg :where(.format>ol>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.3333333em}.lg\:format-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-format] *)){margin-top:.8888889em;margin-bottom:.8888889em}.lg\:format-lg :where(hr):not(:where([class~=not-format] *)){margin-top:3.1111111em;margin-bottom:3.1111111em}.lg\:format-lg :where(hr+*):not(:where([class~=not-format] *)){margin-top:0}.lg\:format-lg :where(h2+*):not(:where([class~=not-format] *)){margin-top:0}.lg\:format-lg :where(h3+*):not(:where([class~=not-format] *)){margin-top:0}.lg\:format-lg :where(h4+*):not(:where([class~=not-format] *)){margin-top:0}.lg\:format-lg :where(table):not(:where([class~=not-format] *)){font-size:.8888889em;line-height:1.5}.lg\:format-lg :where(thead th):not(:where([class~=not-format] *)){padding-right:.75em;padding-bottom:.75em;padding-left:.75em}.lg\:format-lg :where(thead th:last-child):not(:where([class~=not-format] *)){padding-right:0}.lg\:format-lg :where(tbody td,tfoot td):not(:where([class~=not-format] *)){padding:.75em}.lg\:format-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-format] *)){padding-right:0}.lg\:format-lg :where(.format>:first-child):not(:where([class~=not-format] *)){margin-top:0}.lg\:format-lg :where(.format>:last-child):not(:where([class~=not-format] *)){margin-bottom:0}}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 66 159/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(28 100 242/var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus,.focus\:ring-4:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-blue-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(164 202 254/var(--tw-ring-opacity))}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(63 131 248/var(--tw-ring-opacity))}.focus\:ring-gray-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}:is(.dark .dark\:border-blue-500){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-600){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:border-transparent){border-color:#0000}:is(.dark .dark\:bg-blue-600){--tw-bg-opacity:1;background-color:rgb(28 100 242/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-600){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-900\/80){background-color:#111827cc}:is(.dark .dark\:text-blue-500){--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(240 82 82/var(--tw-text-opacity))}:is(.dark .dark\:text-slate-800){--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:placeholder-gray-400)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity))}:is(.dark .dark\:placeholder-gray-400)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity))}:is(.dark .dark\:hover\:bg-blue-700:hover){--tw-bg-opacity:1;background-color:rgb(26 86 219/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-600:hover){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-blue-500:hover){--tw-text-opacity:1;color:rgb(63 131 248/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-300:hover){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-white:hover){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:focus\:border-blue-500:focus){--tw-border-opacity:1;border-color:rgb(63 131 248/var(--tw-border-opacity))}:is(.dark .dark\:focus\:rin
gitextract_kg9gks1i/ ├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── package.json ├── pyproject.toml ├── src/ │ ├── app/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── management/ │ │ │ └── commands/ │ │ │ ├── clear_cache.py │ │ │ └── regenerate_data.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_init_data.py │ │ │ ├── 0003_sitemap.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── sitemap.py │ │ ├── tests.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── components/ │ │ ├── __init__.py │ │ ├── active_search/ │ │ │ ├── input.py │ │ │ ├── tbody.py │ │ │ └── urls.py │ │ ├── bulk_update/ │ │ │ ├── table.py │ │ │ ├── tbody.py │ │ │ └── urls.py │ │ ├── cascading_selects/ │ │ │ ├── parent_select.py │ │ │ ├── select.py │ │ │ └── urls.py │ │ ├── click_to_edit.py │ │ ├── click_to_load/ │ │ │ ├── table.py │ │ │ ├── tbody.py │ │ │ └── urls.py │ │ ├── component_tabs/ │ │ │ ├── component_tabs.css │ │ │ ├── component_tabs.html │ │ │ ├── component_tabs.js │ │ │ └── component_tabs.py │ │ ├── delete_row.py │ │ ├── edit_row/ │ │ │ ├── row.py │ │ │ ├── table.py │ │ │ └── urls.py │ │ ├── infinite_scroll/ │ │ │ ├── table.py │ │ │ ├── tbody.py │ │ │ └── urls.py │ │ ├── inline_validation/ │ │ │ ├── form.py │ │ │ ├── forms.py │ │ │ ├── input.py │ │ │ └── urls.py │ │ ├── progress_bar/ │ │ │ ├── bar.py │ │ │ ├── start.py │ │ │ ├── status.py │ │ │ └── urls.py │ │ └── urls.py │ ├── config/ │ │ ├── __init__.py │ │ ├── asgi.py │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ ├── manage.py │ ├── static/ │ │ ├── input/ │ │ │ └── style.css │ │ └── output/ │ │ ├── preload.js │ │ ├── prism.css │ │ ├── prism.js │ │ ├── sse.js │ │ ├── style.css │ │ └── ws.js │ ├── staticfiles/ │ │ ├── __init__.d41d8cd98f00.py │ │ ├── __init__.py │ │ ├── _base.51249b9b3e6d.html │ │ ├── _base.9d44d0a966ee.html │ │ ├── _base.f222f8408fbe.html │ │ ├── _base.html │ │ ├── active_search/ │ │ │ ├── input.0d7f732a97de.py │ │ │ ├── input.py │ │ │ ├── tbody.46fe860010d3.py │ │ │ ├── tbody.py │ │ │ ├── urls.69d1718169f9.py │ │ │ └── urls.py │ │ ├── active_search.78bab46ab4f3.html │ │ ├── active_search.78decbf8ff19.html │ │ ├── active_search.html │ │ ├── admin/ │ │ │ ├── css/ │ │ │ │ ├── autocomplete.4a81fc4242d0.css │ │ │ │ ├── autocomplete.css │ │ │ │ ├── base.6be58084bde8.css │ │ │ │ ├── base.9f65b5cd54b3.css │ │ │ │ ├── base.css │ │ │ │ ├── changelists.47cb433b29d4.css │ │ │ │ ├── changelists.css │ │ │ │ ├── dark_mode.css │ │ │ │ ├── dark_mode.e18e9a052429.css │ │ │ │ ├── dashboard.css │ │ │ │ ├── dashboard.e90f2068217b.css │ │ │ │ ├── forms.b29a0c8c9155.css │ │ │ │ ├── forms.css │ │ │ │ ├── login.586129c60a93.css │ │ │ │ ├── login.css │ │ │ │ ├── nav_sidebar.css │ │ │ │ ├── nav_sidebar.dd925738f4cc.css │ │ │ │ ├── responsive.css │ │ │ │ ├── responsive.eafb93ff084c.css │ │ │ │ ├── responsive_rtl.7d1130848605.css │ │ │ │ ├── responsive_rtl.css │ │ │ │ ├── rtl.aa92d763340b.css │ │ │ │ ├── rtl.css │ │ │ │ ├── vendor/ │ │ │ │ │ └── select2/ │ │ │ │ │ ├── LICENSE-SELECT2.f94142512c91.md │ │ │ │ │ ├── LICENSE-SELECT2.md │ │ │ │ │ ├── select2.a2194c262648.css │ │ │ │ │ ├── select2.css │ │ │ │ │ └── select2.min.9f54e6414f87.css │ │ │ │ ├── widgets.8a70ea6d8850.css │ │ │ │ └── widgets.css │ │ │ ├── img/ │ │ │ │ ├── LICENSE │ │ │ │ ├── LICENSE.2c54f4e1ca1c │ │ │ │ ├── README.a70711a38d87.txt │ │ │ │ └── README.txt │ │ │ └── js/ │ │ │ ├── SelectBox.7d3ce5a98007.js │ │ │ ├── SelectBox.js │ │ │ ├── SelectFilter2.b8cf7343ff9e.js │ │ │ ├── SelectFilter2.js │ │ │ ├── actions.867b023a736d.js │ │ │ ├── actions.js │ │ │ ├── admin/ │ │ │ │ ├── DateTimeShortcuts.9f6e209cebca.js │ │ │ │ ├── DateTimeShortcuts.js │ │ │ │ ├── RelatedObjectLookups.ef211845e458.js │ │ │ │ └── RelatedObjectLookups.js │ │ │ ├── autocomplete.01591ab27be7.js │ │ │ ├── autocomplete.js │ │ │ ├── calendar.d64496bbf46d.js │ │ │ ├── calendar.js │ │ │ ├── cancel.ecc4c5ca7b32.js │ │ │ ├── cancel.js │ │ │ ├── change_form.9d8ca4f96b75.js │ │ │ ├── change_form.js │ │ │ ├── collapse.f84e7410290f.js │ │ │ ├── collapse.js │ │ │ ├── core.7e257fdf56dc.js │ │ │ ├── core.js │ │ │ ├── filters.0e360b7a9f80.js │ │ │ ├── filters.js │ │ │ ├── inlines.22d4d93c00b4.js │ │ │ ├── inlines.js │ │ │ ├── jquery.init.b7781a0897fc.js │ │ │ ├── jquery.init.js │ │ │ ├── nav_sidebar.3b9190d420b1.js │ │ │ ├── nav_sidebar.js │ │ │ ├── popup_response.c6cc78ea5551.js │ │ │ ├── popup_response.js │ │ │ ├── prepopulate.bd2361dfd64d.js │ │ │ ├── prepopulate.js │ │ │ ├── prepopulate_init.6cac7f3105b8.js │ │ │ ├── prepopulate_init.js │ │ │ ├── theme.ab270f56bb9c.js │ │ │ ├── theme.js │ │ │ ├── urlify.ae970a820212.js │ │ │ ├── urlify.js │ │ │ └── vendor/ │ │ │ ├── jquery/ │ │ │ │ ├── LICENSE.de877aa6d744.txt │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── jquery.12e87d2f3a4c.js │ │ │ │ ├── jquery.js │ │ │ │ └── jquery.min.2c872dbe60f4.js │ │ │ ├── select2/ │ │ │ │ ├── LICENSE.f94142512c91.md │ │ │ │ ├── LICENSE.md │ │ │ │ ├── i18n/ │ │ │ │ │ ├── af.4f6fcd73488c.js │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.65aa8e36bf5d.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── az.270c257daf81.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── bg.39b8be30d4f0.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── bn.6d42b4dd5665.js │ │ │ │ │ ├── bn.js │ │ │ │ │ ├── bs.91624382358e.js │ │ │ │ │ ├── bs.js │ │ │ │ │ ├── ca.a166b745933a.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.4f43e8e7d33a.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── da.766346afe4dd.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.8a1c222b0204.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── dsb.56372c92d2f1.js │ │ │ │ │ ├── dsb.js │ │ │ │ │ ├── el.27097f071856.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en.cf932ba09a98.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── es.66dbc2652fb1.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.2b96fd98289d.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── eu.adfe5c97b72c.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── fa.3b5bd1961cfd.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.614ec42aa9ba.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fr.05e0542fcfe6.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.d99b1fedaa86.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── he.e420ff6cd3ed.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.70640d41628f.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── hr.a2b092cc1147.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hsb.fa3b55265efe.js │ │ │ │ │ ├── hsb.js │ │ │ │ │ ├── hu.6ec6039cb8a3.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── hy.c7babaeef5a6.js │ │ │ │ │ ├── hy.js │ │ │ │ │ ├── id.04debded514d.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── is.3ddd9a6a97e9.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── it.be4fe8d365b5.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.170ae885d74f.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── ka.2083264a54f0.js │ │ │ │ │ ├── ka.js │ │ │ │ │ ├── km.c23089cb06ca.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.e7be6c20e673.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── lt.23c7ce903300.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.08e62128eac1.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── mk.dabbb9087130.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── ms.4ba82c9a51ce.js │ │ │ │ │ ├── ms.js │ │ │ │ │ ├── nb.da2fce143f27.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── ne.3d79fd3f08db.js │ │ │ │ │ ├── ne.js │ │ │ │ │ ├── nl.997868a37ed8.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── pl.6031b4f16452.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── ps.38dfa47af9e0.js │ │ │ │ │ ├── ps.js │ │ │ │ │ ├── pt-BR.e1b294433e7f.js │ │ │ │ │ ├── pt-BR.js │ │ │ │ │ ├── pt.33b4a3b44d43.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.f75cb460ec3b.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.934aa95f5b5f.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sk.33d02cef8d11.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.131a78bc0752.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.5636b60d29c9.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sr-Cyrl.f254bb8c4c7c.js │ │ │ │ │ ├── sr-Cyrl.js │ │ │ │ │ ├── sr.5ed85a48f483.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── sv.7a9c2f71e777.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── th.f38c20b0221b.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tk.7c572a68c78f.js │ │ │ │ │ ├── tk.js │ │ │ │ │ ├── tr.b5a0643d1545.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── uk.8cede7f4803c.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.097a5b75b3e1.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-CN.2cff662ec5f9.js │ │ │ │ │ ├── zh-CN.js │ │ │ │ │ ├── zh-TW.04554a227c2b.js │ │ │ │ │ └── zh-TW.js │ │ │ │ ├── select2.full.c2afdeda3058.js │ │ │ │ ├── select2.full.js │ │ │ │ └── select2.full.min.fcd7500d8e13.js │ │ │ └── xregexp/ │ │ │ ├── LICENSE.b6fd2ceea8d3.txt │ │ │ ├── LICENSE.txt │ │ │ ├── xregexp.a7e08b0ce686.js │ │ │ ├── xregexp.js │ │ │ └── xregexp.min.f1ae4617847c.js │ │ ├── bulk_update/ │ │ │ ├── table.19dbdd92634b.py │ │ │ ├── table.ece66eda3489.py │ │ │ ├── table.py │ │ │ ├── tbody.0b798d7e4a5e.py │ │ │ ├── tbody.py │ │ │ ├── urls.4e760d1714af.py │ │ │ └── urls.py │ │ ├── bulk_update.09b471a09100.html │ │ ├── bulk_update.3010cd02c183.html │ │ ├── bulk_update.html │ │ ├── cascading_selects/ │ │ │ ├── parent_select.663100c7b50f.py │ │ │ ├── parent_select.ffa4c4dbe794.py │ │ │ ├── parent_select.py │ │ │ ├── select.158aa777d411.py │ │ │ ├── select.py │ │ │ ├── urls.cf66c75263f5.py │ │ │ └── urls.py │ │ ├── cascading_selects.3f302e32ce84.html │ │ ├── cascading_selects.6609b643d2c7.html │ │ ├── cascading_selects.html │ │ ├── click_to_edit.2527ba5d7858.py │ │ ├── click_to_edit.38f8beda892c.html │ │ ├── click_to_edit.6c67df9f7cb4.html │ │ ├── click_to_edit.8084c1fdc479.html │ │ ├── click_to_edit.e860a5aa4d24.py │ │ ├── click_to_edit.html │ │ ├── click_to_edit.py │ │ ├── click_to_load/ │ │ │ ├── table.0b1bb8bf7c91.py │ │ │ ├── table.7b9417c3d2ed.py │ │ │ ├── table.py │ │ │ ├── tbody.b43c2a210a14.py │ │ │ ├── tbody.e59bf7e3e1be.py │ │ │ ├── tbody.py │ │ │ ├── urls.b6ab5fb54fd4.py │ │ │ └── urls.py │ │ ├── click_to_load.10c9b98d47d9.html │ │ ├── click_to_load.5b3914747c41.html │ │ ├── click_to_load.html │ │ ├── component_tabs/ │ │ │ ├── component_tabs.00b940293d23.html │ │ │ ├── component_tabs.25ef95b81a22.py │ │ │ ├── component_tabs.28d0d597d814.html │ │ │ ├── component_tabs.4c76e3fe56f0.css │ │ │ ├── component_tabs.689c07ee933a.js │ │ │ ├── component_tabs.css │ │ │ ├── component_tabs.f3bd68dc790a.js │ │ │ ├── component_tabs.html │ │ │ ├── component_tabs.js │ │ │ └── component_tabs.py │ │ ├── delete_row.08dbca324200.py │ │ ├── delete_row.3d715f1d83c7.html │ │ ├── delete_row.65b5c6777191.html │ │ ├── delete_row.html │ │ ├── delete_row.py │ │ ├── django-htmx.b395a6831ba0.js │ │ ├── django-htmx.js │ │ ├── edit_row/ │ │ │ ├── row.101ee2e30322.py │ │ │ ├── row.py │ │ │ ├── table.49d751742877.py │ │ │ ├── table.b2e07e31fe0d.py │ │ │ ├── table.py │ │ │ ├── urls.afbd9697c969.py │ │ │ └── urls.py │ │ ├── edit_row.f0b2badf8c40.html │ │ ├── edit_row.fb217a7059d4.html │ │ ├── edit_row.html │ │ ├── flowbite.min.7c2b54dea4b1.js │ │ ├── htmx.min.23806a07aa01.js │ │ ├── index.330ffa9733ef.html │ │ ├── index.3b13d7de4566.html │ │ ├── index.c8db3aff394f.html │ │ ├── index.html │ │ ├── infinite_scroll/ │ │ │ ├── table.624e6ab16a01.py │ │ │ ├── table.c757f118a80a.py │ │ │ ├── table.py │ │ │ ├── tbody.02a65ee11b28.py │ │ │ ├── tbody.889ea8380c38.py │ │ │ ├── tbody.bbb8483b7598.py │ │ │ ├── tbody.py │ │ │ ├── urls.2119b85fae27.py │ │ │ └── urls.py │ │ ├── infinite_scroll.2911a76df6e3.html │ │ ├── infinite_scroll.557f08f53b4d.html │ │ ├── infinite_scroll.html │ │ ├── inline_validation/ │ │ │ ├── form.17ae9d61f48e.py │ │ │ ├── form.py │ │ │ ├── forms.fdf8f5825f8b.py │ │ │ ├── forms.py │ │ │ ├── input.1fc6025d3995.py │ │ │ ├── input.py │ │ │ ├── urls.1c76c74c8dfb.py │ │ │ └── urls.py │ │ ├── inline_validation.17ef819302a3.html │ │ ├── inline_validation.180c06390895.html │ │ ├── inline_validation.html │ │ ├── preload.738a4657614c.js │ │ ├── preload.js │ │ ├── prism.1598ec91cbbd.css │ │ ├── prism.167e3bcdc317.js │ │ ├── prism.css │ │ ├── prism.js │ │ ├── progress_bar/ │ │ │ ├── bar.b8a3e8689aaa.py │ │ │ ├── bar.py │ │ │ ├── start.a6c80516bd2f.py │ │ │ ├── start.py │ │ │ ├── status.11892046b39b.py │ │ │ ├── status.6f3dc147a08a.py │ │ │ ├── status.8ddef869643a.py │ │ │ ├── status.py │ │ │ ├── urls.d84e7c811b76.py │ │ │ └── urls.py │ │ ├── progress_bar.a39ec01f4c8b.html │ │ ├── progress_bar.c363aeb6fcab.html │ │ ├── progress_bar.html │ │ ├── sse.d41d8cd98f00.js │ │ ├── sse.js │ │ ├── staticfiles.json │ │ ├── style.8907c8ae0e4d.css │ │ ├── style.a787112a42a1.css │ │ ├── style.b924d806fdc9.css │ │ ├── style.css │ │ ├── urls.ed747cf49aae.py │ │ ├── urls.py │ │ ├── ws.d96b2cd51173.js │ │ └── ws.js │ └── templates/ │ ├── __init__.py │ ├── _base.html │ ├── active_search.html │ ├── bulk_update.html │ ├── cascading_selects.html │ ├── click_to_edit.html │ ├── click_to_load.html │ ├── delete_row.html │ ├── edit_row.html │ ├── index.html │ ├── infinite_scroll.html │ ├── inline_validation.html │ └── progress_bar.html └── tailwind.config.js
SYMBOL INDEX (1210 symbols across 142 files)
FILE: src/app/apps.py
class AppConfig (line 4) | class AppConfig(AppConfig):
FILE: src/app/management/commands/clear_cache.py
class Command (line 5) | class Command(BaseCommand):
method handle (line 8) | def handle(self, *args, **kwargs):
FILE: src/app/management/commands/regenerate_data.py
class Command (line 5) | class Command(BaseCommand):
method handle (line 8) | def handle(self, *args, **kwargs):
FILE: src/app/migrations/0001_initial.py
class Migration (line 7) | class Migration(migrations.Migration):
FILE: src/app/migrations/0002_init_data.py
function create_initial_data (line 6) | def create_initial_data(apps, schema_editor):
class Migration (line 17) | class Migration(migrations.Migration):
FILE: src/app/migrations/0003_sitemap.py
function create_site (line 5) | def create_site(apps, schema_editor):
class Migration (line 10) | class Migration(migrations.Migration):
FILE: src/app/models.py
class Contact (line 6) | class Contact(models.Model):
class Job (line 13) | class Job(models.Model):
class Brand (line 17) | class Brand(models.Model):
class CarModel (line 21) | class CarModel(models.Model):
FILE: src/app/sitemap.py
class StaticViewSitemap (line 5) | class StaticViewSitemap(Sitemap):
method items (line 9) | def items(self):
method location (line 24) | def location(self, item):
FILE: src/app/utils.py
function source_link (line 784) | def source_link(link):
function delete_contacts (line 788) | def delete_contacts():
function create_contacts (line 792) | def create_contacts(contacts=contacts_list, count=None):
function create_brands_and_cars (line 805) | def create_brands_and_cars():
FILE: src/app/views.py
function index (line 7) | def index(request):
function inline_validation (line 23) | def inline_validation(request):
function bulk_update (line 55) | def bulk_update(request):
function click_to_load (line 74) | def click_to_load(request):
function edit_row (line 94) | def edit_row(request):
function delete_row (line 113) | def delete_row(request):
function click_to_edit (line 132) | def click_to_edit(request):
function infinite_scroll (line 153) | def infinite_scroll(request):
function active_search (line 182) | def active_search(request):
function progress_bar (line 201) | def progress_bar(request):
function cascading_selects (line 221) | def cascading_selects(request):
FILE: src/components/active_search/input.py
class InputActiveSearchComponent (line 5) | class InputActiveSearchComponent(component.Component):
FILE: src/components/active_search/tbody.py
class TBodyActiveSearchComponent (line 7) | class TBodyActiveSearchComponent(component.Component):
method post (line 19) | def post(self, request, **kwargs):
FILE: src/components/bulk_update/table.py
class TableBulkUpdateComponent (line 9) | class TableBulkUpdateComponent(component.Component):
method get_context_data (line 46) | def get_context_data(self, **kwargs):
FILE: src/components/bulk_update/tbody.py
class TBodyBulkUpdateComponent (line 7) | class TBodyBulkUpdateComponent(component.Component):
method get_context_data (line 31) | def get_context_data(self, contacts, **kwargs):
method post (line 34) | def post(self, request, update, *args, **kwargs):
FILE: src/components/cascading_selects/parent_select.py
class ParentSelectCascadingSelectsComponent (line 8) | class ParentSelectCascadingSelectsComponent(component.Component):
method get_context_data (line 26) | def get_context_data(self, *args, **kwargs) -> Dict[str, Any]:
FILE: src/components/cascading_selects/select.py
class SelectCascadingSelectsComponent (line 7) | class SelectCascadingSelectsComponent(component.Component):
method get_context_data (line 14) | def get_context_data(self, brand, *args, **kwargs):
method get (line 18) | def get(self, request, *args, **kwargs):
FILE: src/components/click_to_edit.py
function build_context (line 6) | def build_context(contact, editing=False):
class ClickToEditComponent (line 17) | class ClickToEditComponent(component.Component):
method get_context_data (line 59) | def get_context_data(self, id, **kwargs):
method get (line 63) | def get(self, request, id, *args, **kwargs):
method post (line 68) | def post(self, request, id, *args, **kwargs):
FILE: src/components/click_to_load/table.py
class TableClickToLoadComponent (line 8) | class TableClickToLoadComponent(component.Component):
method get_context_data (line 25) | def get_context_data(self, **kwargs):
FILE: src/components/click_to_load/tbody.py
class TBodyClickToLoadComponent (line 8) | class TBodyClickToLoadComponent(component.Component):
method get_context_data (line 35) | def get_context_data(self, page_obj, **kwargs):
method get (line 38) | def get(self, request, page, **kwargs):
FILE: src/components/component_tabs/component_tabs.js
function updateTabs (line 1) | function updateTabs() {
FILE: src/components/component_tabs/component_tabs.py
class ComponentTabsComponent (line 5) | class ComponentTabsComponent(component.Component):
class Media (line 8) | class Media:
FILE: src/components/delete_row.py
class DeleteRowComponent (line 8) | class DeleteRowComponent(component.Component):
method delete (line 43) | def delete(self, request, id, *args, **kwargs):
method get_context_data (line 48) | def get_context_data(self, **kwargs):
FILE: src/components/edit_row/row.py
class RowEditRowComponent (line 7) | class RowEditRowComponent(component.Component):
method get (line 58) | def get(self, request, id, *args, **kwargs):
method post (line 64) | def post(self, request, id, *args, **kwargs):
method get_context_data (line 72) | def get_context_data(self, contact, **kwargs):
FILE: src/components/edit_row/table.py
class TableEditRowComponent (line 8) | class TableEditRowComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, **kwargs):
FILE: src/components/infinite_scroll/table.py
class TableInfiniteScrollComponent (line 8) | class TableInfiniteScrollComponent(component.Component):
method get_context_data (line 30) | def get_context_data(self, **kwargs):
FILE: src/components/infinite_scroll/tbody.py
class TBodyInfiniteScrollComponent (line 8) | class TBodyInfiniteScrollComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, page_obj, **kwargs):
method get (line 30) | def get(self, request, page, **kwargs):
FILE: src/components/inline_validation/form.py
class FormInlineValidationComponent (line 7) | class FormInlineValidationComponent(component.Component):
method get_context_data (line 29) | def get_context_data(self, **kwargs):
method post (line 33) | def post(self, request, *args, **kwargs):
FILE: src/components/inline_validation/forms.py
function htmx_inline_validated_input_widget_factory (line 6) | def htmx_inline_validated_input_widget_factory(base_widget_class):
class HtmxFormBase (line 30) | class HtmxFormBase(forms.Form):
method __init__ (line 33) | def __init__(self, *args, **kwargs):
class InlineValidationForm (line 58) | class InlineValidationForm(HtmxFormBase):
FILE: src/components/inline_validation/input.py
class InputInlineValidationComponent (line 5) | class InputInlineValidationComponent(component.Component):
FILE: src/components/progress_bar/bar.py
class BarProgressBarComponent (line 7) | class BarProgressBarComponent(component.Component):
method get_context_data (line 50) | def get_context_data(self, id, **kwargs):
method get (line 54) | def get(self, request, id, **kwargs):
FILE: src/components/progress_bar/start.py
class StartProgressBar (line 5) | class StartProgressBar(component.Component):
FILE: src/components/progress_bar/status.py
class StatusProgressBarComponent (line 7) | class StatusProgressBarComponent(component.Component):
method get (line 26) | def get(self, request, id, **kwargs):
method post (line 30) | def post(self, request, **kwargs):
FILE: src/config/wsgi.py
function setup_sqlite (line 13) | def setup_sqlite(connection, **kwargs):
FILE: src/manage.py
function main (line 7) | def main():
FILE: src/static/output/prism.js
function u (line 3) | function u(e){s.highlightedCode=e,a.hooks.run("before-insert",s),s.eleme...
function i (line 3) | function i(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=...
function l (line 3) | function l(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a...
function o (line 3) | function o(e,n,t,r,s,g){for(var f in t)if(t.hasOwnProperty(f)&&t[f]){var...
function s (line 3) | function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e...
function u (line 3) | function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a...
function c (line 3) | function c(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;n.ne...
function f (line 3) | function f(){a.manual||a.highlightAll()}
function r (line 9) | function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getCo...
function n (line 11) | function n(t){this.defaults=e({},t)}
function r (line 11) | function r(e){for(var t=0,n=0;n<e.length;++n)e.charCodeAt(n)=="\t".charC...
function t (line 13) | function t(t){var e=document.createElement("textarea");e.value=t.getText...
function i (line 13) | function i(){setTimeout((function(){u("copy")}),n["copy-timeout"])}
function u (line 13) | function u(t){r.textContent=n[t],c.setAttribute("data-copy-state",t)}
FILE: src/static/output/ws.js
function splitOnWhitespace (line 68) | function splitOnWhitespace(trigger) {
function getLegacyWebsocketURL (line 72) | function getLegacyWebsocketURL(elt) {
function ensureWebSocket (line 91) | function ensureWebSocket(socketElt) {
function createWebsocketWrapper (line 178) | function createWebsocketWrapper(socketElt, socketFunc) {
function ensureWebSocketSend (line 308) | function ensureWebSocketSend(elt) {
function hasWebSocket (line 323) | function hasWebSocket(node) {
function processWebSocketSend (line 333) | function processWebSocketSend(socketElt, sendElt) {
function getWebSocketReconnectDelay (line 394) | function getWebSocketReconnectDelay(retryCount) {
function maybeCloseWebSocketSource (line 419) | function maybeCloseWebSocketSource(elt) {
function createWebSocket (line 434) | function createWebSocket(url) {
function queryAttributeOnThisOrChildren (line 446) | function queryAttributeOnThisOrChildren(elt, attributeName) {
function forEach (line 468) | function forEach(arr, func) {
FILE: src/staticfiles/active_search/input.0d7f732a97de.py
class InputActiveSearchComponent (line 5) | class InputActiveSearchComponent(component.Component):
FILE: src/staticfiles/active_search/input.py
class InputActiveSearchComponent (line 5) | class InputActiveSearchComponent(component.Component):
FILE: src/staticfiles/active_search/tbody.46fe860010d3.py
class TBodyActiveSearchComponent (line 7) | class TBodyActiveSearchComponent(component.Component):
method post (line 19) | def post(self, request, **kwargs):
FILE: src/staticfiles/active_search/tbody.py
class TBodyActiveSearchComponent (line 7) | class TBodyActiveSearchComponent(component.Component):
method post (line 19) | def post(self, request, **kwargs):
FILE: src/staticfiles/admin/js/SelectBox.7d3ce5a98007.js
method get_hidden_node_count (line 44) | get_hidden_node_count(id) {
FILE: src/staticfiles/admin/js/SelectBox.js
method get_hidden_node_count (line 44) | get_hidden_node_count(id) {
FILE: src/staticfiles/admin/js/actions.867b023a736d.js
function show (line 4) | function show(selector) {
function hide (line 10) | function hide(selector) {
function showQuestion (line 16) | function showQuestion(options) {
function showClear (line 22) | function showClear(options) {
function reset (line 30) | function reset(options) {
function clearAcross (line 37) | function clearAcross(options) {
function checker (line 46) | function checker(actionCheckboxes, options, checked) {
function updateCounter (line 58) | function updateCounter(actionCheckboxes, options) {
function affectedCheckboxes (line 131) | function affectedCheckboxes(target, withModifier) {
function ready (line 190) | function ready(fn) {
FILE: src/staticfiles/admin/js/actions.js
function show (line 4) | function show(selector) {
function hide (line 10) | function hide(selector) {
function showQuestion (line 16) | function showQuestion(options) {
function showClear (line 22) | function showClear(options) {
function reset (line 30) | function reset(options) {
function clearAcross (line 37) | function clearAcross(options) {
function checker (line 46) | function checker(actionCheckboxes, options, checked) {
function updateCounter (line 58) | function updateCounter(actionCheckboxes, options) {
function affectedCheckboxes (line 131) | function affectedCheckboxes(target, withModifier) {
function ready (line 190) | function ready(fn) {
FILE: src/staticfiles/admin/js/admin/RelatedObjectLookups.ef211845e458.js
function dismissChildPopups (line 10) | function dismissChildPopups() {
function setPopupIndex (line 19) | function setPopupIndex() {
function addPopupIndex (line 28) | function addPopupIndex(name) {
function removePopupIndex (line 32) | function removePopupIndex(name) {
function showAdminPopup (line 36) | function showAdminPopup(triggeringLink, name_regexp, add_popup) {
function showRelatedObjectLookupPopup (line 48) | function showRelatedObjectLookupPopup(triggeringLink) {
function dismissRelatedLookupPopup (line 52) | function dismissRelatedLookupPopup(win, chosenId) {
function showRelatedObjectPopup (line 67) | function showRelatedObjectPopup(triggeringLink) {
function updateRelatedObjectLinks (line 71) | function updateRelatedObjectLinks(triggeringLink) {
function updateRelatedSelectsOptions (line 90) | function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr,...
function dismissAddRelatedObjectPopup (line 120) | function dismissAddRelatedObjectPopup(win, newId, newRepr) {
function dismissChangeRelatedObjectPopup (line 150) | function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
function dismissDeleteRelatedObjectPopup (line 174) | function dismissDeleteRelatedObjectPopup(win, objId) {
FILE: src/staticfiles/admin/js/admin/RelatedObjectLookups.js
function dismissChildPopups (line 10) | function dismissChildPopups() {
function setPopupIndex (line 19) | function setPopupIndex() {
function addPopupIndex (line 28) | function addPopupIndex(name) {
function removePopupIndex (line 32) | function removePopupIndex(name) {
function showAdminPopup (line 36) | function showAdminPopup(triggeringLink, name_regexp, add_popup) {
function showRelatedObjectLookupPopup (line 48) | function showRelatedObjectLookupPopup(triggeringLink) {
function dismissRelatedLookupPopup (line 52) | function dismissRelatedLookupPopup(win, chosenId) {
function showRelatedObjectPopup (line 67) | function showRelatedObjectPopup(triggeringLink) {
function updateRelatedObjectLinks (line 71) | function updateRelatedObjectLinks(triggeringLink) {
function updateRelatedSelectsOptions (line 90) | function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr,...
function dismissAddRelatedObjectPopup (line 120) | function dismissAddRelatedObjectPopup(win, newId, newRepr) {
function dismissChangeRelatedObjectPopup (line 150) | function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
function dismissDeleteRelatedObjectPopup (line 174) | function dismissDeleteRelatedObjectPopup(win, objId) {
FILE: src/staticfiles/admin/js/calendar.d64496bbf46d.js
function calendarMonth (line 134) | function calendarMonth(y, m) {
function Calendar (line 179) | function Calendar(div_id, callback, selected) {
FILE: src/staticfiles/admin/js/calendar.js
function calendarMonth (line 134) | function calendarMonth(y, m) {
function Calendar (line 179) | function Calendar(div_id, callback, selected) {
FILE: src/staticfiles/admin/js/cancel.ecc4c5ca7b32.js
function ready (line 6) | function ready(fn) {
function handleClick (line 15) | function handleClick(event) {
FILE: src/staticfiles/admin/js/cancel.js
function ready (line 6) | function ready(fn) {
function handleClick (line 15) | function handleClick(event) {
FILE: src/staticfiles/admin/js/core.7e257fdf56dc.js
function quickElement (line 5) | function quickElement() {
function removeChildren (line 20) | function removeChildren(a) {
function findPosX (line 30) | function findPosX(obj) {
function findPosY (line 43) | function findPosY(obj) {
FILE: src/staticfiles/admin/js/core.js
function quickElement (line 5) | function quickElement() {
function removeChildren (line 20) | function removeChildren(a) {
function findPosX (line 30) | function findPosX(obj) {
function findPosY (line 43) | function findPosY(obj) {
FILE: src/staticfiles/admin/js/nav_sidebar.3b9190d420b1.js
function initSidebarQuickFilter (line 26) | function initSidebarQuickFilter() {
FILE: src/staticfiles/admin/js/nav_sidebar.js
function initSidebarQuickFilter (line 26) | function initSidebarQuickFilter() {
FILE: src/staticfiles/admin/js/theme.ab270f56bb9c.js
function setTheme (line 5) | function setTheme(mode) {
function cycleTheme (line 14) | function cycleTheme() {
function initTheme (line 39) | function initTheme() {
function setupTheme (line 45) | function setupTheme() {
FILE: src/staticfiles/admin/js/theme.js
function setTheme (line 5) | function setTheme(mode) {
function cycleTheme (line 14) | function cycleTheme() {
function initTheme (line 39) | function initTheme() {
function setupTheme (line 45) | function setupTheme() {
FILE: src/staticfiles/admin/js/urlify.ae970a820212.js
function downcode (line 141) | function downcode(slug) {
function URLify (line 149) | function URLify(s, num_chars, allowUnicode) {
FILE: src/staticfiles/admin/js/urlify.js
function downcode (line 141) | function downcode(slug) {
function URLify (line 149) | function URLify(s, num_chars, allowUnicode) {
FILE: src/staticfiles/admin/js/vendor/jquery/jquery.12e87d2f3a4c.js
function DOMEval (line 104) | function DOMEval( code, node, doc ) {
function toType (line 134) | function toType( obj ) {
function isArrayLike (line 546) | function isArrayLike( obj ) {
function nodeName (line 564) | function nodeName( elem, name ) {
function fcssescape (line 610) | function fcssescape( ch, asCodePoint ) {
function safeActiveElement (line 777) | function safeActiveElement() {
function find (line 805) | function find( selector, context, results, seed ) {
function createCache (line 948) | function createCache() {
function markFunction (line 969) | function markFunction( fn ) {
function assert (line 978) | function assert( fn ) {
function createInputPseudo (line 1001) | function createInputPseudo( type ) {
function createButtonPseudo (line 1011) | function createButtonPseudo( type ) {
function createDisabledPseudo (line 1022) | function createDisabledPseudo( disabled ) {
function createPositionalPseudo (line 1077) | function createPositionalPseudo( fn ) {
function testContext (line 1100) | function testContext( context ) {
function setDocument (line 1109) | function setDocument( node ) {
function setFilters (line 2083) | function setFilters() {}
function tokenize (line 2087) | function tokenize( selector, parseOnly ) {
function toSelector (line 2159) | function toSelector( tokens ) {
function addCombinator (line 2169) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 2231) | function elementMatcher( matchers ) {
function multipleContexts (line 2245) | function multipleContexts( selector, contexts, results ) {
function condense (line 2254) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 2275) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2374) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2442) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function compile (line 2568) | function compile( selector, match /* Internal Use Only */ ) {
function select (line 2609) | function select( selector, context, results, seed ) {
function winnow (line 2762) | function winnow( elements, qualifier, not ) {
function sibling (line 3057) | function sibling( cur, dir ) {
function createOptions (line 3150) | function createOptions( options ) {
function Identity (line 3375) | function Identity( v ) {
function Thrower (line 3378) | function Thrower( ex ) {
function adoptValue (line 3382) | function adoptValue( value, resolve, reject, noValue ) {
function resolve (line 3475) | function resolve( depth, deferred, handler, special ) {
function completed (line 3851) | function completed() {
function fcamelCase (line 3946) | function fcamelCase( _all, letter ) {
function camelCase (line 3953) | function camelCase( string ) {
function Data (line 3970) | function Data() {
function getData (line 4139) | function getData( data ) {
function dataAttr (line 4164) | function dataAttr( elem, key, data ) {
function adjustCSS (line 4476) | function adjustCSS( elem, prop, valueParts, tween ) {
function getDefaultDisplay (line 4544) | function getDefaultDisplay( elem ) {
function showHide (line 4567) | function showHide( elements, show ) {
function getAll (line 4699) | function getAll( context, tag ) {
function setGlobalEval (line 4724) | function setGlobalEval( elems, refElements ) {
function buildFragment (line 4740) | function buildFragment( elems, context, scripts, selection, ignored ) {
function returnTrue (line 4832) | function returnTrue() {
function returnFalse (line 4836) | function returnFalse() {
function on (line 4840) | function on( elem, types, selector, data, fn, one ) {
function leverageNative (line 5328) | function leverageNative( el, type, isSetup ) {
function focusMappedHandler (line 5541) | function focusMappedHandler( nativeEvent ) {
function manipulationTarget (line 5793) | function manipulationTarget( elem, content ) {
function disableScript (line 5804) | function disableScript( elem ) {
function restoreScript (line 5808) | function restoreScript( elem ) {
function cloneCopyEvent (line 5818) | function cloneCopyEvent( src, dest ) {
function fixInput (line 5851) | function fixInput( src, dest ) {
function domManip (line 5864) | function domManip( collection, args, callback, ignored ) {
function remove (line 5962) | function remove( elem, selector, keepData ) {
function computeStyleTests (line 6280) | function computeStyleTests() {
function roundPixelMeasures (line 6324) | function roundPixelMeasures( measure ) {
function curCSS (line 6417) | function curCSS( elem, name, computed ) {
function addGetHookIf (line 6502) | function addGetHookIf( conditionFn, hookFn ) {
function vendorPropName (line 6527) | function vendorPropName( name ) {
function finalPropName (line 6542) | function finalPropName( name ) {
function setPositiveNumber (line 6567) | function setPositiveNumber( _elem, value, subtract ) {
function boxModelAdjustment (line 6579) | function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, ...
function getWidthOrHeight (line 6650) | function getWidthOrHeight( elem, dimension, extra ) {
function Tween (line 7035) | function Tween( elem, options, prop, end, easing ) {
function schedule (line 7158) | function schedule() {
function createFxNow (line 7171) | function createFxNow() {
function genFx (line 7179) | function genFx( type, includeWidth ) {
function createTween (line 7199) | function createTween( value, prop, animation ) {
function defaultPrefilter (line 7213) | function defaultPrefilter( elem, props, opts ) {
function propFilter (line 7385) | function propFilter( props, specialEasing ) {
function Animation (line 7422) | function Animation( elem, properties, options ) {
function stripAndCollapse (line 8136) | function stripAndCollapse( value ) {
function getClass (line 8142) | function getClass( elem ) {
function classesToArray (line 8146) | function classesToArray( value ) {
function buildParams (line 8725) | function buildParams( prefix, obj, traditional, add ) {
function addToPrefiltersOrTransports (line 8878) | function addToPrefiltersOrTransports( structure ) {
function inspectPrefiltersOrTransports (line 8912) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
function ajaxExtend (line 8941) | function ajaxExtend( target, src ) {
function ajaxHandleResponses (line 8961) | function ajaxHandleResponses( s, jqXHR, responses ) {
function ajaxConvert (line 9019) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
function done (line 9535) | function done( status, nativeStatusText, responses, headers ) {
FILE: src/staticfiles/admin/js/vendor/jquery/jquery.js
function DOMEval (line 104) | function DOMEval( code, node, doc ) {
function toType (line 134) | function toType( obj ) {
function isArrayLike (line 546) | function isArrayLike( obj ) {
function nodeName (line 564) | function nodeName( elem, name ) {
function fcssescape (line 610) | function fcssescape( ch, asCodePoint ) {
function safeActiveElement (line 777) | function safeActiveElement() {
function find (line 805) | function find( selector, context, results, seed ) {
function createCache (line 948) | function createCache() {
function markFunction (line 969) | function markFunction( fn ) {
function assert (line 978) | function assert( fn ) {
function createInputPseudo (line 1001) | function createInputPseudo( type ) {
function createButtonPseudo (line 1011) | function createButtonPseudo( type ) {
function createDisabledPseudo (line 1022) | function createDisabledPseudo( disabled ) {
function createPositionalPseudo (line 1077) | function createPositionalPseudo( fn ) {
function testContext (line 1100) | function testContext( context ) {
function setDocument (line 1109) | function setDocument( node ) {
function setFilters (line 2083) | function setFilters() {}
function tokenize (line 2087) | function tokenize( selector, parseOnly ) {
function toSelector (line 2159) | function toSelector( tokens ) {
function addCombinator (line 2169) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 2231) | function elementMatcher( matchers ) {
function multipleContexts (line 2245) | function multipleContexts( selector, contexts, results ) {
function condense (line 2254) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 2275) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2374) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2442) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function compile (line 2568) | function compile( selector, match /* Internal Use Only */ ) {
function select (line 2609) | function select( selector, context, results, seed ) {
function winnow (line 2762) | function winnow( elements, qualifier, not ) {
function sibling (line 3057) | function sibling( cur, dir ) {
function createOptions (line 3150) | function createOptions( options ) {
function Identity (line 3375) | function Identity( v ) {
function Thrower (line 3378) | function Thrower( ex ) {
function adoptValue (line 3382) | function adoptValue( value, resolve, reject, noValue ) {
function resolve (line 3475) | function resolve( depth, deferred, handler, special ) {
function completed (line 3851) | function completed() {
function fcamelCase (line 3946) | function fcamelCase( _all, letter ) {
function camelCase (line 3953) | function camelCase( string ) {
function Data (line 3970) | function Data() {
function getData (line 4139) | function getData( data ) {
function dataAttr (line 4164) | function dataAttr( elem, key, data ) {
function adjustCSS (line 4476) | function adjustCSS( elem, prop, valueParts, tween ) {
function getDefaultDisplay (line 4544) | function getDefaultDisplay( elem ) {
function showHide (line 4567) | function showHide( elements, show ) {
function getAll (line 4699) | function getAll( context, tag ) {
function setGlobalEval (line 4724) | function setGlobalEval( elems, refElements ) {
function buildFragment (line 4740) | function buildFragment( elems, context, scripts, selection, ignored ) {
function returnTrue (line 4832) | function returnTrue() {
function returnFalse (line 4836) | function returnFalse() {
function on (line 4840) | function on( elem, types, selector, data, fn, one ) {
function leverageNative (line 5328) | function leverageNative( el, type, isSetup ) {
function focusMappedHandler (line 5541) | function focusMappedHandler( nativeEvent ) {
function manipulationTarget (line 5793) | function manipulationTarget( elem, content ) {
function disableScript (line 5804) | function disableScript( elem ) {
function restoreScript (line 5808) | function restoreScript( elem ) {
function cloneCopyEvent (line 5818) | function cloneCopyEvent( src, dest ) {
function fixInput (line 5851) | function fixInput( src, dest ) {
function domManip (line 5864) | function domManip( collection, args, callback, ignored ) {
function remove (line 5962) | function remove( elem, selector, keepData ) {
function computeStyleTests (line 6280) | function computeStyleTests() {
function roundPixelMeasures (line 6324) | function roundPixelMeasures( measure ) {
function curCSS (line 6417) | function curCSS( elem, name, computed ) {
function addGetHookIf (line 6502) | function addGetHookIf( conditionFn, hookFn ) {
function vendorPropName (line 6527) | function vendorPropName( name ) {
function finalPropName (line 6542) | function finalPropName( name ) {
function setPositiveNumber (line 6567) | function setPositiveNumber( _elem, value, subtract ) {
function boxModelAdjustment (line 6579) | function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, ...
function getWidthOrHeight (line 6650) | function getWidthOrHeight( elem, dimension, extra ) {
function Tween (line 7035) | function Tween( elem, options, prop, end, easing ) {
function schedule (line 7158) | function schedule() {
function createFxNow (line 7171) | function createFxNow() {
function genFx (line 7179) | function genFx( type, includeWidth ) {
function createTween (line 7199) | function createTween( value, prop, animation ) {
function defaultPrefilter (line 7213) | function defaultPrefilter( elem, props, opts ) {
function propFilter (line 7385) | function propFilter( props, specialEasing ) {
function Animation (line 7422) | function Animation( elem, properties, options ) {
function stripAndCollapse (line 8136) | function stripAndCollapse( value ) {
function getClass (line 8142) | function getClass( elem ) {
function classesToArray (line 8146) | function classesToArray( value ) {
function buildParams (line 8725) | function buildParams( prefix, obj, traditional, add ) {
function addToPrefiltersOrTransports (line 8878) | function addToPrefiltersOrTransports( structure ) {
function inspectPrefiltersOrTransports (line 8912) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
function ajaxExtend (line 8941) | function ajaxExtend( target, src ) {
function ajaxHandleResponses (line 8961) | function ajaxHandleResponses( s, jqXHR, responses ) {
function ajaxConvert (line 9019) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
function done (line 9535) | function done( status, nativeStatusText, responses, headers ) {
FILE: src/staticfiles/admin/js/vendor/jquery/jquery.min.2c872dbe60f4.js
function m (line 2) | function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e...
function x (line 2) | function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof...
function c (line 2) | function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e...
function fe (line 2) | function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLower...
function p (line 2) | function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCode...
function I (line 2) | function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeTyp...
function W (line 2) | function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cach...
function F (line 2) | function F(e){return e[S]=!0,e}
function $ (line 2) | function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e...
function B (line 2) | function B(t){return function(e){return fe(e,"input")&&e.type===t}}
function _ (line 2) | function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&...
function z (line 2) | function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.d...
function X (line 2) | function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a...
function U (line 2) | function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function V (line 2) | function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeTyp...
function G (line 2) | function G(){}
function Y (line 2) | function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);...
function Q (line 2) | function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function J (line 2) | function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n+...
function K (line 2) | function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--...
function Z (line 2) | function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o...
function ee (line 2) | function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)...
function te (line 2) | function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.r...
function ne (line 2) | function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e))...
function re (line 2) | function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l...
function T (line 2) | function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t...
function A (line 2) | function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}
function N (line 2) | function N(e){return e}
function q (line 2) | function q(e){throw e}
function L (line 2) | function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n...
function l (line 2) | function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(...
function P (line 2) | function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventL...
function W (line 2) | function W(e,t){return t.toUpperCase()}
function F (line 2) | function F(e){return e.replace(R,"ms-").replace(I,W)}
function B (line 2) | function B(){this.expando=ce.expando+B.uid++}
function V (line 2) | function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.r...
function te (line 2) | function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:functio...
function re (line 2) | function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[...
function Se (line 2) | function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNa...
function Ee (line 2) | function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",...
function Ae (line 2) | function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),...
function Ne (line 2) | function Ne(){return!0}
function qe (line 2) | function qe(){return!1}
function Le (line 2) | function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"...
function He (line 2) | function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handl...
function o (line 2) | function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.f...
function Re (line 2) | function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild...
function Ie (line 2) | function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function We (line 2) | function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.sli...
function Fe (line 2) | function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=...
function $e (line 2) | function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],...
function Be (line 2) | function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++...
function Ge (line 2) | function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))...
function Ye (line 2) | function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(...
function e (line 2) | function e(){if(l){u.style.cssText="position:absolute;left:-11111px;widt...
function t (line 2) | function t(e){return Math.round(parseFloat(e))}
function Ze (line 2) | function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=fu...
function rt (line 2) | function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function it (line 2) | function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"bo...
function ot (line 2) | function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-b...
function at (line 2) | function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}
function dt (line 2) | function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAni...
function ht (line 2) | function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}
function gt (line 2) | function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin...
function vt (line 2) | function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["...
function yt (line 2) | function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().al...
function Tt (line 2) | function Tt(e){return(e.match(D)||[]).join(" ")}
function Ct (line 2) | function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}
function kt (line 2) | function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)|...
function Pt (line 2) | function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r...
function Ut (line 2) | function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var ...
function Vt (line 2) | function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!...
function Gt (line 2) | function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)vo...
function l (line 2) | function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=v...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/bs.91624382358e.js
function e (line 3) | function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/bs.js
function e (line 3) | function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/cs.4f43e8e7d33a.js
function e (line 3) | function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři"...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/cs.js
function e (line 3) | function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři"...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/hr.a2b092cc1147.js
function n (line 3) | function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/hr.js
function n (line 3) | function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/lt.23c7ce903300.js
function n (line 3) | function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/lt.js
function n (line 3) | function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/lv.08e62128eac1.js
function e (line 3) | function e(e,n,u,i){return 11===e?n:e%10==1?u:i}
FILE: src/staticfiles/admin/js/vendor/select2/i18n/lv.js
function e (line 3) | function e(e,n,u,i){return 11===e?n:e%10==1?u:i}
FILE: src/staticfiles/admin/js/vendor/select2/i18n/ru.934aa95f5b5f.js
function n (line 3) | function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}
FILE: src/staticfiles/admin/js/vendor/select2/i18n/ru.js
function n (line 3) | function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}
FILE: src/staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.f254bb8c4c7c.js
function n (line 3) | function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.js
function n (line 3) | function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/sr.5ed85a48f483.js
function n (line 3) | function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/sr.js
function n (line 3) | function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/uk.8cede7f4803c.js
function n (line 3) | function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5...
FILE: src/staticfiles/admin/js/vendor/select2/i18n/uk.js
function n (line 3) | function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5...
FILE: src/staticfiles/admin/js/vendor/select2/select2.full.c2afdeda3058.js
function hasProp (line 65) | function hasProp(obj, prop) {
function normalize (line 77) | function normalize(name, baseName) {
function makeRequire (line 187) | function makeRequire(relName, forceSync) {
function makeNormalize (line 204) | function makeNormalize(relName) {
function makeLoad (line 210) | function makeLoad(depName) {
function callDep (line 216) | function callDep(name) {
function splitPrefix (line 233) | function splitPrefix(name) {
function makeRelParts (line 245) | function makeRelParts(relName) {
function makeConfig (line 293) | function makeConfig(name) {
function BaseConstructor (line 509) | function BaseConstructor () {
function getMethods (line 526) | function getMethods (theClass) {
function DecoratedClass (line 552) | function DecoratedClass () {
function ctr (line 570) | function ctr () {
function Results (line 846) | function Results ($element, options, dataAdapter) {
function BaseSelection (line 1409) | function BaseSelection ($element, options) {
function SingleSelection (line 1589) | function SingleSelection () {
function MultipleSelection (line 1696) | function MultipleSelection ($element, options) {
function Placeholder (line 1811) | function Placeholder (decorated, $element, options) {
function AllowClear (line 1863) | function AllowClear () { }
function Search (line 1977) | function Search (decorated, $element, options) {
function EventRelay (line 2212) | function EventRelay () { }
function Translation (line 2262) | function Translation (dict) {
function BaseAdapter (line 3149) | function BaseAdapter ($element, options) {
function SelectAdapter (line 3192) | function SelectAdapter ($element, options) {
function ArrayAdapter (line 3478) | function ArrayAdapter ($element, options) {
function onlyItem (line 3517) | function onlyItem (item) {
function AjaxAdapter (line 3562) | function AjaxAdapter ($element, options) {
function request (line 3623) | function request () {
function Tags (line 3671) | function Tags (decorated, $element, options) {
function wrapper (line 3710) | function wrapper (obj, child) {
function Tokenizer (line 3798) | function Tokenizer (decorated, $element, options) {
function createAndSelect (line 3818) | function createAndSelect (data) {
function select (line 3841) | function select (data) {
function MinimumInputLength (line 3915) | function MinimumInputLength (decorated, $e, options) {
function MaximumInputLength (line 3946) | function MaximumInputLength (decorated, $e, options) {
function MaximumSelectionLength (line 3978) | function MaximumSelectionLength (decorated, $e, options) {
function Dropdown (line 4034) | function Dropdown ($element, options) {
function Search (line 4077) | function Search () { }
function HidePlaceholder (line 4192) | function HidePlaceholder (decorated, $element, options, dataAdapter) {
function InfiniteScroll (line 4235) | function InfiniteScroll (decorated, $element, options, dataAdapter) {
function AttachBody (line 4329) | function AttachBody (decorated, $element, options) {
function countResults (line 4586) | function countResults (data) {
function MinimumResultsForSearch (line 4602) | function MinimumResultsForSearch (decorated, $element, options, dataAdap...
function SelectOnClose (line 4626) | function SelectOnClose () { }
function CloseOnSelect (line 4677) | function CloseOnSelect () { }
function Defaults (line 4810) | function Defaults () {
function stripDiacritics (line 5020) | function stripDiacritics (text) {
function matcher (line 5029) | function matcher (params, data) {
function Options (line 5222) | function Options (options, $element) {
function upperCaseLetter (line 5297) | function upperCaseLetter(_, letter) {
function syncCssClasses (line 6027) | function syncCssClasses ($dest, $src, adapter) {
function _containerAdapter (line 6073) | function _containerAdapter (clazz) {
function ContainerCSS (line 6077) | function ContainerCSS () { }
function _dropdownAdapter (line 6130) | function _dropdownAdapter (clazz) {
function DropdownCSS (line 6134) | function DropdownCSS () { }
function InitSelection (line 6185) | function InitSelection (decorated, $element, options) {
function InputData (line 6229) | function InputData (decorated, $element, options) {
function getSelected (line 6247) | function getSelected (data, selectedIds) {
function oldMatcher (line 6357) | function oldMatcher (matcher) {
function Query (line 6400) | function Query (decorated, $element, options) {
function AttachContainer (line 6427) | function AttachContainer (decorated, $element, options) {
function StopPropagation (line 6446) | function StopPropagation () { }
function StopPropagation (line 6485) | function StopPropagation () { }
function handler (line 6613) | function handler(event) {
function nullLowestDelta (line 6726) | function nullLowestDelta() {
function shouldAdjustOldDeltas (line 6730) | function shouldAdjustOldDeltas(orgEvent, absDelta) {
FILE: src/staticfiles/admin/js/vendor/select2/select2.full.js
function hasProp (line 65) | function hasProp(obj, prop) {
function normalize (line 77) | function normalize(name, baseName) {
function makeRequire (line 187) | function makeRequire(relName, forceSync) {
function makeNormalize (line 204) | function makeNormalize(relName) {
function makeLoad (line 210) | function makeLoad(depName) {
function callDep (line 216) | function callDep(name) {
function splitPrefix (line 233) | function splitPrefix(name) {
function makeRelParts (line 245) | function makeRelParts(relName) {
function makeConfig (line 293) | function makeConfig(name) {
function BaseConstructor (line 509) | function BaseConstructor () {
function getMethods (line 526) | function getMethods (theClass) {
function DecoratedClass (line 552) | function DecoratedClass () {
function ctr (line 570) | function ctr () {
function Results (line 846) | function Results ($element, options, dataAdapter) {
function BaseSelection (line 1409) | function BaseSelection ($element, options) {
function SingleSelection (line 1589) | function SingleSelection () {
function MultipleSelection (line 1696) | function MultipleSelection ($element, options) {
function Placeholder (line 1811) | function Placeholder (decorated, $element, options) {
function AllowClear (line 1863) | function AllowClear () { }
function Search (line 1977) | function Search (decorated, $element, options) {
function EventRelay (line 2212) | function EventRelay () { }
function Translation (line 2262) | function Translation (dict) {
function BaseAdapter (line 3149) | function BaseAdapter ($element, options) {
function SelectAdapter (line 3192) | function SelectAdapter ($element, options) {
function ArrayAdapter (line 3478) | function ArrayAdapter ($element, options) {
function onlyItem (line 3517) | function onlyItem (item) {
function AjaxAdapter (line 3562) | function AjaxAdapter ($element, options) {
function request (line 3623) | function request () {
function Tags (line 3671) | function Tags (decorated, $element, options) {
function wrapper (line 3710) | function wrapper (obj, child) {
function Tokenizer (line 3798) | function Tokenizer (decorated, $element, options) {
function createAndSelect (line 3818) | function createAndSelect (data) {
function select (line 3841) | function select (data) {
function MinimumInputLength (line 3915) | function MinimumInputLength (decorated, $e, options) {
function MaximumInputLength (line 3946) | function MaximumInputLength (decorated, $e, options) {
function MaximumSelectionLength (line 3978) | function MaximumSelectionLength (decorated, $e, options) {
function Dropdown (line 4034) | function Dropdown ($element, options) {
function Search (line 4077) | function Search () { }
function HidePlaceholder (line 4192) | function HidePlaceholder (decorated, $element, options, dataAdapter) {
function InfiniteScroll (line 4235) | function InfiniteScroll (decorated, $element, options, dataAdapter) {
function AttachBody (line 4329) | function AttachBody (decorated, $element, options) {
function countResults (line 4586) | function countResults (data) {
function MinimumResultsForSearch (line 4602) | function MinimumResultsForSearch (decorated, $element, options, dataAdap...
function SelectOnClose (line 4626) | function SelectOnClose () { }
function CloseOnSelect (line 4677) | function CloseOnSelect () { }
function Defaults (line 4810) | function Defaults () {
function stripDiacritics (line 5020) | function stripDiacritics (text) {
function matcher (line 5029) | function matcher (params, data) {
function Options (line 5222) | function Options (options, $element) {
function upperCaseLetter (line 5297) | function upperCaseLetter(_, letter) {
function syncCssClasses (line 6027) | function syncCssClasses ($dest, $src, adapter) {
function _containerAdapter (line 6073) | function _containerAdapter (clazz) {
function ContainerCSS (line 6077) | function ContainerCSS () { }
function _dropdownAdapter (line 6130) | function _dropdownAdapter (clazz) {
function DropdownCSS (line 6134) | function DropdownCSS () { }
function InitSelection (line 6185) | function InitSelection (decorated, $element, options) {
function InputData (line 6229) | function InputData (decorated, $element, options) {
function getSelected (line 6247) | function getSelected (data, selectedIds) {
function oldMatcher (line 6357) | function oldMatcher (matcher) {
function Query (line 6400) | function Query (decorated, $element, options) {
function AttachContainer (line 6427) | function AttachContainer (decorated, $element, options) {
function StopPropagation (line 6446) | function StopPropagation () { }
function StopPropagation (line 6485) | function StopPropagation () { }
function handler (line 6613) | function handler(event) {
function nullLowestDelta (line 6726) | function nullLowestDelta() {
function shouldAdjustOldDeltas (line 6730) | function shouldAdjustOldDeltas(orgEvent, absDelta) {
FILE: src/staticfiles/admin/js/vendor/select2/select2.full.min.fcd7500d8e13.js
function b (line 2) | function b(e,t){return r.call(e,t)}
function c (line 2) | function c(e,t){var n,i,r,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&...
function A (line 2) | function A(t,n){return function(){var e=a.call(arguments,0);return"strin...
function x (line 2) | function x(t){return function(e){m[t]=e}}
function D (line 2) | function D(e){if(b(v,e)){var t=v[e];delete v[e],_[e]=!0,o.apply(h,t)}if(...
function u (line 2) | function u(e){var t,n=e?e.indexOf("!"):-1;return-1<n&&(t=e.substring(0,n...
function S (line 2) | function S(e){return e?u(e):[]}
function u (line 2) | function u(e){var t=e.prototype,n=[];for(var i in t){"function"==typeof ...
function i (line 2) | function i(){this.constructor=e}
function o (line 2) | function o(){var e=Array.prototype.unshift,t=r.prototype.constructor.len...
function a (line 2) | function a(e){var t=function(){};e in o.prototype&&(t=o.prototype[e]);va...
function e (line 2) | function e(){this.listeners={}}
function i (line 2) | function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__...
function o (line 2) | function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.c...
function r (line 2) | function r(){r.__super__.constructor.apply(this,arguments)}
function n (line 2) | function n(e,t){n.__super__.constructor.apply(this,arguments)}
function t (line 2) | function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get("plac...
function e (line 2) | function e(){}
function e (line 2) | function e(e,t,n){e.call(this,t,n)}
function e (line 2) | function e(){}
function i (line 2) | function i(e){this.dict=e||{}}
function n (line 2) | function n(e,t){n.__super__.constructor.call(this)}
function n (line 2) | function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.c...
function i (line 2) | function i(e,t){this._dataToConvert=t.get("data")||[],i.__super__.constr...
function o (line 2) | function o(e){return function(){return g(this).val()==e.id}}
function n (line 2) | function n(e,t){this.ajaxOptions=this._applyDefaults(t.get("ajax")),null...
function e (line 2) | function e(){var e=t.transport(t,function(e){var t=r.processResults(e,n)...
function e (line 2) | function e(e,t,n){var i=n.get("tags"),r=n.get("createTag");void 0!==r&&(...
function e (line 2) | function e(e,t,n){var i=n.get("tokenizer");void 0!==i&&(this.tokenizer=i...
function e (line 2) | function e(e,t,n){this.minimumInputLength=n.get("minimumInputLength"),e....
function e (line 2) | function e(e,t,n){this.maximumInputLength=n.get("maximumInputLength"),e....
function e (line 2) | function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLen...
function n (line 2) | function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.c...
function t (line 2) | function t(){}
function e (line 2) | function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get("pl...
function e (line 2) | function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingM...
function e (line 2) | function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||docume...
function e (line 2) | function e(e,t,n,i){this.minimumResultsForSearch=n.get("minimumResultsFo...
function e (line 2) | function e(){}
function e (line 2) | function e(){}
function n (line 2) | function n(){this.reset()}
function a (line 2) | function a(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return t[...
function e (line 2) | function e(e,t){if(this.options=e,null!=t&&this.fromElement(t),null!=t&&...
function i (line 2) | function i(e,t){return t.toUpperCase()}
function l (line 2) | function l(e){return null}
function e (line 2) | function e(){}
function l (line 2) | function l(e){return null}
function e (line 2) | function e(){}
function e (line 2) | function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console....
function e (line 2) | function e(e,t,n){this._currentData=[],this._valueSeparator=n.get("value...
function i (line 2) | function i(e,t){var n=[];return e.selected||-1!==s.inArray(e.id,t)?(e.se...
function e (line 2) | function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console....
function e (line 2) | function e(e,t,n){e.call(this,t,n)}
function e (line 2) | function e(){}
function e (line 2) | function e(){}
function i (line 2) | function i(e){var t,n=e||window.event,i=g.call(arguments,1),r=0,o=0,s=0,...
function v (line 2) | function v(){f=null}
function y (line 2) | function y(e,t){return m.settings.adjustOldDeltas&&"mousewheel"===e.type...
FILE: src/staticfiles/admin/js/vendor/xregexp/xregexp.a7e08b0ce686.js
function r (line 1) | function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==...
function _createForOfIteratorHelper (line 32) | function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof...
function _unsupportedIterableToArray (line 34) | function _unsupportedIterableToArray(o, minLen) { var _context4; if (!o)...
function _arrayLikeToArray (line 36) | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.leng...
function normalize (line 68) | function normalize(name) {
function charCode (line 73) | function charCode(chr) {
function invertBmp (line 79) | function invertBmp(range) {
function cacheInvertedBmp (line 108) | function cacheInvertedBmp(slug) {
function buildAstral (line 114) | function buildAstral(slug, isNegated) {
function cacheAstral (line 139) | function cacheAstral(slug, isNegated) {
function _createForOfIteratorHelper (line 441) | function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof...
function _unsupportedIterableToArray (line 443) | function _unsupportedIterableToArray(o, minLen) { var _context9; if (!o)...
function _arrayLikeToArray (line 445) | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.leng...
function hasNativeFlag (line 494) | function hasNativeFlag(flag) {
function augment (line 559) | function augment(regex, captureNames, xSource, xFlags, isInternalOnly) {
function clipDuplicates (line 596) | function clipDuplicates(str) {
function copyRegex (line 619) | function copyRegex(regex, options) {
function dec (line 688) | function dec(hex) {
function getContextualTokenSeparator (line 704) | function getContextualTokenSeparator(match, scope, flags) {
function getNativeFlags (line 733) | function getNativeFlags(regex) {
function hasNamedCapture (line 748) | function hasNamedCapture(regex) {
function hex (line 760) | function hex(dec) {
function isQuantifierNext (line 774) | function isQuantifierNext(pattern, pos, flags) {
function isType (line 793) | function isType(value, type) {
function nullThrows (line 806) | function nullThrows(value) {
function pad4 (line 823) | function pad4(str) {
function prepareFlags (line 841) | function prepareFlags(pattern, flags) {
function prepareOptions (line 889) | function prepareOptions(value) {
function registerFlag (line 909) | function registerFlag(flag) {
function runTokens (line 930) | function runTokens(pattern, flags, pos, scope, context) {
function setAstral (line 969) | function setAstral(on) {
function setNamespacing (line 981) | function setNamespacing(on) {
function XRegExp (line 1024) | function XRegExp(pattern, flags) {
function addMatch (line 1586) | function addMatch(match) {
function rewrite (line 1872) | function rewrite(match, paren, backref) {
function replacer (line 2113) | function replacer($0, bracketed, angled, dollarToken) {
function _arrayLikeToArray (line 2472) | function _arrayLikeToArray(arr, len) {
function _arrayWithHoles (line 2486) | function _arrayWithHoles(arr) {
function _interopRequireDefault (line 2492) | function _interopRequireDefault(obj) {
function _iterableToArrayLimit (line 2504) | function _iterableToArrayLimit(arr, i) {
function _nonIterableRest (line 2536) | function _nonIterableRest() {
function _slicedToArray (line 2550) | function _slicedToArray(arr, i) {
function _unsupportedIterableToArray (line 2562) | function _unsupportedIterableToArray(o, minLen) {
function F (line 3248) | function F() { /* empty */ }
FILE: src/staticfiles/admin/js/vendor/xregexp/xregexp.js
function r (line 1) | function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==...
function _createForOfIteratorHelper (line 32) | function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof...
function _unsupportedIterableToArray (line 34) | function _unsupportedIterableToArray(o, minLen) { var _context4; if (!o)...
function _arrayLikeToArray (line 36) | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.leng...
function normalize (line 68) | function normalize(name) {
function charCode (line 73) | function charCode(chr) {
function invertBmp (line 79) | function invertBmp(range) {
function cacheInvertedBmp (line 108) | function cacheInvertedBmp(slug) {
function buildAstral (line 114) | function buildAstral(slug, isNegated) {
function cacheAstral (line 139) | function cacheAstral(slug, isNegated) {
function _createForOfIteratorHelper (line 441) | function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof...
function _unsupportedIterableToArray (line 443) | function _unsupportedIterableToArray(o, minLen) { var _context9; if (!o)...
function _arrayLikeToArray (line 445) | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.leng...
function hasNativeFlag (line 494) | function hasNativeFlag(flag) {
function augment (line 559) | function augment(regex, captureNames, xSource, xFlags, isInternalOnly) {
function clipDuplicates (line 596) | function clipDuplicates(str) {
function copyRegex (line 619) | function copyRegex(regex, options) {
function dec (line 688) | function dec(hex) {
function getContextualTokenSeparator (line 704) | function getContextualTokenSeparator(match, scope, flags) {
function getNativeFlags (line 733) | function getNativeFlags(regex) {
function hasNamedCapture (line 748) | function hasNamedCapture(regex) {
function hex (line 760) | function hex(dec) {
function isQuantifierNext (line 774) | function isQuantifierNext(pattern, pos, flags) {
function isType (line 793) | function isType(value, type) {
function nullThrows (line 806) | function nullThrows(value) {
function pad4 (line 823) | function pad4(str) {
function prepareFlags (line 841) | function prepareFlags(pattern, flags) {
function prepareOptions (line 889) | function prepareOptions(value) {
function registerFlag (line 909) | function registerFlag(flag) {
function runTokens (line 930) | function runTokens(pattern, flags, pos, scope, context) {
function setAstral (line 969) | function setAstral(on) {
function setNamespacing (line 981) | function setNamespacing(on) {
function XRegExp (line 1024) | function XRegExp(pattern, flags) {
function addMatch (line 1586) | function addMatch(match) {
function rewrite (line 1872) | function rewrite(match, paren, backref) {
function replacer (line 2113) | function replacer($0, bracketed, angled, dollarToken) {
function _arrayLikeToArray (line 2472) | function _arrayLikeToArray(arr, len) {
function _arrayWithHoles (line 2486) | function _arrayWithHoles(arr) {
function _interopRequireDefault (line 2492) | function _interopRequireDefault(obj) {
function _iterableToArrayLimit (line 2504) | function _iterableToArrayLimit(arr, i) {
function _nonIterableRest (line 2536) | function _nonIterableRest() {
function _slicedToArray (line 2550) | function _slicedToArray(arr, i) {
function _unsupportedIterableToArray (line 2562) | function _unsupportedIterableToArray(o, minLen) {
function F (line 3248) | function F() { /* empty */ }
FILE: src/staticfiles/admin/js/vendor/xregexp/xregexp.min.f1ae4617847c.js
function o (line 1) | function o(c,i){if(!d[c]){if(!u[c]){var l="function"==typeof require&&re...
function _createForOfIteratorHelper (line 1) | function _createForOfIteratorHelper(u,d){var t=void 0!==i&&l(u)||u["@@it...
function _arrayLikeToArray (line 1) | function _arrayLikeToArray(u,d){(null==d||d>u.length)&&(d=u.length);for(...
function normalize (line 6) | function normalize(u){return u.replace(/[- _]+/g,"").toLowerCase()}
function charCode (line 6) | function charCode(u){var d=/^\\[xu](.+)/.exec(u);return d?a(d[1]):u.char...
function cacheInvertedBmp (line 6) | function cacheInvertedBmp(t){return d[t]["b!"]||(d[t]["b!"]=function inv...
function cacheAstral (line 6) | function cacheAstral(u,t){var a=t?"a!":"a=";return d[u][a]||(d[u][a]=fun...
function _createForOfIteratorHelper (line 12) | function _createForOfIteratorHelper(u,d){var t=void 0!==i&&l(u)||u["@@it...
function _arrayLikeToArray (line 12) | function _arrayLikeToArray(u,d){(null==d||d>u.length)&&(d=u.length);for(...
function hasNativeFlag (line 17) | function hasNativeFlag(u){var d=!0;try{if(new RegExp("",u),"y"===u){".."...
function augment (line 17) | function augment(u,d,t,a,c){var i;if(u.xregexp={captureNames:d},c)return...
function clipDuplicates (line 17) | function clipDuplicates(u){return u.replace(/([\s\S])(?=[\s\S]*\1)/g,"")}
function copyRegex (line 17) | function copyRegex(u,d){var t;if(!XRegExp.isRegExp(u))throw new TypeErro...
function dec (line 17) | function dec(u){return(0,C.default)(u,16)}
function getContextualTokenSeparator (line 17) | function getContextualTokenSeparator(u,d,t){var a=u.index+u[0].length,c=...
function hex (line 17) | function hex(u){return(0,C.default)(u,10).toString(16)}
function isType (line 17) | function isType(u,d){return Object.prototype.toString.call(u)==="[object...
function nullThrows (line 17) | function nullThrows(u){if(null==u)throw new TypeError("Cannot convert nu...
function pad4 (line 17) | function pad4(u){for(;u.length<4;)u="0".concat(u);return u}
function prepareOptions (line 17) | function prepareOptions(u){var d={};return isType(u,"String")?((0,h.defa...
function registerFlag (line 17) | function registerFlag(u){if(!/^[\w$]$/.test(u))throw new Error("Flag mus...
function runTokens (line 17) | function runTokens(u,d,t,a,c){for(var i,l,D=S.length,p=u[t],b=null;D--;)...
function setAstral (line 17) | function setAstral(u){B.astral=u}
function setNamespacing (line 17) | function setNamespacing(u){B.namespacing=u}
function XRegExp (line 17) | function XRegExp(u,d){if(XRegExp.isRegExp(u)){if(void 0!==d)throw new Ty...
function addMatch (line 17) | function addMatch(u){if(a.backref){var d="Backreference to undefined gro...
function rewrite (line 17) | function rewrite(u,d,t){var i=c[l-a];if(d){if(++l,i)return"(?<".concat(i...
function replacer (line 17) | function replacer(u,d,c,i){d=d||c;var l,D,p=isType(t[t.length-1],"Object...
function F (line 17) | function F(){}
FILE: src/staticfiles/bulk_update/table.19dbdd92634b.py
class TableBulkUpdateComponent (line 9) | class TableBulkUpdateComponent(component.Component):
method get_context_data (line 46) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/bulk_update/table.ece66eda3489.py
class TableBulkUpdateComponent (line 9) | class TableBulkUpdateComponent(component.Component):
method get_context_data (line 46) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/bulk_update/table.py
class TableBulkUpdateComponent (line 9) | class TableBulkUpdateComponent(component.Component):
method get_context_data (line 46) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/bulk_update/tbody.0b798d7e4a5e.py
class TBodyBulkUpdateComponent (line 7) | class TBodyBulkUpdateComponent(component.Component):
method get_context_data (line 31) | def get_context_data(self, contacts, **kwargs):
method post (line 34) | def post(self, request, update, *args, **kwargs):
FILE: src/staticfiles/bulk_update/tbody.py
class TBodyBulkUpdateComponent (line 7) | class TBodyBulkUpdateComponent(component.Component):
method get_context_data (line 31) | def get_context_data(self, contacts, **kwargs):
method post (line 34) | def post(self, request, update, *args, **kwargs):
FILE: src/staticfiles/cascading_selects/parent_select.663100c7b50f.py
class ParentSelectCascadingSelectsComponent (line 8) | class ParentSelectCascadingSelectsComponent(component.Component):
method get_context_data (line 26) | def get_context_data(self, *args, **kwargs) -> Dict[str, Any]:
FILE: src/staticfiles/cascading_selects/parent_select.ffa4c4dbe794.py
class ParentSelectCascadingSelectsComponent (line 8) | class ParentSelectCascadingSelectsComponent(component.Component):
method get_context_data (line 26) | def get_context_data(self, *args, **kwargs) -> Dict[str, Any]:
FILE: src/staticfiles/cascading_selects/parent_select.py
class ParentSelectCascadingSelectsComponent (line 8) | class ParentSelectCascadingSelectsComponent(component.Component):
method get_context_data (line 26) | def get_context_data(self, *args, **kwargs) -> Dict[str, Any]:
FILE: src/staticfiles/cascading_selects/select.158aa777d411.py
class SelectCascadingSelectsComponent (line 7) | class SelectCascadingSelectsComponent(component.Component):
method get_context_data (line 14) | def get_context_data(self, brand, *args, **kwargs):
method get (line 18) | def get(self, request, *args, **kwargs):
FILE: src/staticfiles/cascading_selects/select.py
class SelectCascadingSelectsComponent (line 7) | class SelectCascadingSelectsComponent(component.Component):
method get_context_data (line 14) | def get_context_data(self, brand, *args, **kwargs):
method get (line 18) | def get(self, request, *args, **kwargs):
FILE: src/staticfiles/click_to_edit.2527ba5d7858.py
function build_context (line 6) | def build_context(contact, editing=False):
class ClickToEditComponent (line 17) | class ClickToEditComponent(component.Component):
method get_context_data (line 59) | def get_context_data(self, id, **kwargs):
method get (line 63) | def get(self, request, id, *args, **kwargs):
method post (line 68) | def post(self, request, id, *args, **kwargs):
FILE: src/staticfiles/click_to_edit.e860a5aa4d24.py
function build_context (line 6) | def build_context(contact, editing=False):
class ClickToEditComponent (line 17) | class ClickToEditComponent(component.Component):
method get_context_data (line 59) | def get_context_data(self, id, **kwargs):
method get (line 63) | def get(self, request, id, *args, **kwargs):
method post (line 68) | def post(self, request, id, *args, **kwargs):
FILE: src/staticfiles/click_to_edit.py
function build_context (line 6) | def build_context(contact, editing=False):
class ClickToEditComponent (line 17) | class ClickToEditComponent(component.Component):
method get_context_data (line 59) | def get_context_data(self, id, **kwargs):
method get (line 63) | def get(self, request, id, *args, **kwargs):
method post (line 68) | def post(self, request, id, *args, **kwargs):
FILE: src/staticfiles/click_to_load/table.0b1bb8bf7c91.py
class TableClickToLoadComponent (line 8) | class TableClickToLoadComponent(component.Component):
method get_context_data (line 25) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/click_to_load/table.7b9417c3d2ed.py
class TableClickToLoadComponent (line 8) | class TableClickToLoadComponent(component.Component):
method get_context_data (line 25) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/click_to_load/table.py
class TableClickToLoadComponent (line 8) | class TableClickToLoadComponent(component.Component):
method get_context_data (line 25) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/click_to_load/tbody.b43c2a210a14.py
class TBodyClickToLoadComponent (line 8) | class TBodyClickToLoadComponent(component.Component):
method get_context_data (line 33) | def get_context_data(self, page_obj, **kwargs):
method get (line 36) | def get(self, request, page, **kwargs):
FILE: src/staticfiles/click_to_load/tbody.e59bf7e3e1be.py
class TBodyClickToLoadComponent (line 8) | class TBodyClickToLoadComponent(component.Component):
method get_context_data (line 35) | def get_context_data(self, page_obj, **kwargs):
method get (line 38) | def get(self, request, page, **kwargs):
FILE: src/staticfiles/click_to_load/tbody.py
class TBodyClickToLoadComponent (line 8) | class TBodyClickToLoadComponent(component.Component):
method get_context_data (line 35) | def get_context_data(self, page_obj, **kwargs):
method get (line 38) | def get(self, request, page, **kwargs):
FILE: src/staticfiles/component_tabs/component_tabs.25ef95b81a22.py
class ComponentTabsComponent (line 5) | class ComponentTabsComponent(component.Component):
class Media (line 8) | class Media:
FILE: src/staticfiles/component_tabs/component_tabs.f3bd68dc790a.js
function updateTabs (line 1) | function updateTabs() {
FILE: src/staticfiles/component_tabs/component_tabs.js
function updateTabs (line 1) | function updateTabs() {
FILE: src/staticfiles/component_tabs/component_tabs.py
class ComponentTabsComponent (line 5) | class ComponentTabsComponent(component.Component):
class Media (line 8) | class Media:
FILE: src/staticfiles/delete_row.08dbca324200.py
class DeleteRowComponent (line 8) | class DeleteRowComponent(component.Component):
method delete (line 43) | def delete(self, request, id, *args, **kwargs):
method get_context_data (line 48) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/delete_row.py
class DeleteRowComponent (line 8) | class DeleteRowComponent(component.Component):
method delete (line 43) | def delete(self, request, id, *args, **kwargs):
method get_context_data (line 48) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/edit_row/row.101ee2e30322.py
class RowEditRowComponent (line 7) | class RowEditRowComponent(component.Component):
method get (line 58) | def get(self, request, id, *args, **kwargs):
method post (line 64) | def post(self, request, id, *args, **kwargs):
method get_context_data (line 72) | def get_context_data(self, contact, **kwargs):
FILE: src/staticfiles/edit_row/row.py
class RowEditRowComponent (line 7) | class RowEditRowComponent(component.Component):
method get (line 58) | def get(self, request, id, *args, **kwargs):
method post (line 64) | def post(self, request, id, *args, **kwargs):
method get_context_data (line 72) | def get_context_data(self, contact, **kwargs):
FILE: src/staticfiles/edit_row/table.49d751742877.py
class TableEditRowComponent (line 8) | class TableEditRowComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/edit_row/table.b2e07e31fe0d.py
class TableEditRowComponent (line 8) | class TableEditRowComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/edit_row/table.py
class TableEditRowComponent (line 8) | class TableEditRowComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/flowbite.min.7c2b54dea4b1.js
function O (line 1) | function O(t){return t?(t.nodeName||"").toLowerCase():null}
function x (line 1) | function x(t){if(null==t)return window;if("[object Window]"!==t.toString...
function C (line 1) | function C(t){return t instanceof x(t).Element||t instanceof Element}
function T (line 1) | function T(t){return t instanceof x(t).HTMLElement||t instanceof HTMLEle...
function P (line 1) | function P(t){return"undefined"!=typeof ShadowRoot&&(t instanceof x(t).S...
function j (line 1) | function j(t){return t.split("-")[0]}
function M (line 1) | function M(){var t=navigator.userAgentData;return null!=t&&t.brands?t.br...
function q (line 1) | function q(){return!/^((?!chrome|android).)*safari/i.test(M())}
function V (line 1) | function V(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBound...
function B (line 1) | function B(t){var e=V(t),i=t.offsetWidth,n=t.offsetHeight;return Math.ab...
function R (line 1) | function R(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))re...
function W (line 1) | function W(t){return x(t).getComputedStyle(t)}
function F (line 1) | function F(t){return["table","td","th"].indexOf(O(t))>=0}
function K (line 1) | function K(t){return((C(t)?t.ownerDocument:t.document)||window.document)...
function N (line 1) | function N(t){return"html"===O(t)?t:t.assignedSlot||t.parentNode||(P(t)?...
function U (line 1) | function U(t){return T(t)&&"fixed"!==W(t).position?t.offsetParent:null}
function X (line 1) | function X(t){for(var e=x(t),i=U(t);i&&F(i)&&"static"===W(i).position;)i...
function Y (line 1) | function Y(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}
function G (line 1) | function G(t,e,i){return D(t,S(e,i))}
function $ (line 1) | function $(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}
function J (line 1) | function J(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}
function Z (line 1) | function Z(t){return t.split("-")[1]}
function et (line 1) | function et(t){var e,i=t.popper,a=t.popperRect,c=t.placement,l=t.variati...
function st (line 1) | function st(t){return t.replace(/left|right|bottom|top/g,(function(t){re...
function ct (line 1) | function ct(t){return t.replace(/start|end/g,(function(t){return at[t]}))}
function lt (line 1) | function lt(t){var e=x(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pa...
function dt (line 1) | function dt(t){return V(K(t)).left+lt(t).scrollLeft}
function ut (line 1) | function ut(t){var e=W(t),i=e.overflow,n=e.overflowX,o=e.overflowY;retur...
function pt (line 1) | function pt(t){return["html","body","#document"].indexOf(O(t))>=0?t.owne...
function ht (line 1) | function ht(t,e){var i;void 0===e&&(e=[]);var n=pt(t),o=n===(null==(i=t....
function ft (line 1) | function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.w...
function vt (line 1) | function vt(t,e,i){return e===p?ft(function(t,e){var i=x(t),n=K(t),o=i.v...
function gt (line 1) | function gt(t,e,i,n){var o="clippingParents"===e?function(t){var e=ht(N(...
function _t (line 1) | function _t(t){var e,i=t.reference,a=t.element,c=t.placement,u=c?j(c):nu...
function mt (line 1) | function mt(t,e){void 0===e&&(e={});var i=e,s=i.placement,a=void 0===s?t...
function bt (line 1) | function bt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-...
function Et (line 1) | function Et(t){return[n,r,o,s].some((function(e){return t[e]>=0}))}
function At (line 1) | function At(t,e,i){void 0===i&&(i=!1);var n,o,r=T(e),s=T(e)&&function(t)...
function Ot (line 1) | function Ot(t){var e=new Map,i=new Set,n=[];function o(t){i.add(t.name),...
function Ct (line 1) | function Ct(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]...
function Tt (line 1) | function Tt(t){void 0===t&&(t={});var e=t,i=e.defaultModifiers,n=void 0=...
function t (line 1) | function t(t,e,i,a){void 0===t&&(t=null),void 0===e&&(e=[]),void 0===i&&...
function c (line 1) | function c(){document.querySelectorAll("[data-accordion]").forEach((func...
function t (line 1) | function t(t,e,i,a){void 0===t&&(t=null),void 0===e&&(e=[]),void 0===i&&...
function c (line 1) | function c(){document.querySelectorAll("[data-carousel]").forEach((funct...
function t (line 1) | function t(t,e,i,a){void 0===t&&(t=null),void 0===e&&(e=null),void 0===i...
function c (line 1) | function c(){document.querySelectorAll("[data-collapse-toggle]").forEach...
function t (line 1) | function t(t,e,i,a,c){void 0===t&&(t=null),void 0===e&&(e=null),void 0==...
function c (line 1) | function c(){document.querySelectorAll("[data-dial-init]").forEach((func...
function t (line 1) | function t(t,e,i,a){void 0===t&&(t=null),void 0===e&&(e=null),void 0===i...
function c (line 1) | function c(){document.querySelectorAll("[data-dismiss-target]").forEach(...
function t (line 1) | function t(t,e,i){void 0===t&&(t=null),void 0===e&&(e=r),void 0===i&&(i=...
function c (line 1) | function c(){document.querySelectorAll("[data-drawer-target]").forEach((...
function t (line 1) | function t(t,e,i,o){void 0===t&&(t=null),void 0===e&&(e=null),void 0===i...
function d (line 1) | function d(){document.querySelectorAll("[data-dropdown-toggle]").forEach...
function v (line 1) | function v(){(0,n.initAccordions)(),(0,r.initCollapses)(),(0,o.initCarou...
function t (line 1) | function t(t,e,i,a,c){void 0===t&&(t=null),void 0===e&&(e=null),void 0==...
function c (line 1) | function c(){document.querySelectorAll("[data-input-counter]").forEach((...
function t (line 1) | function t(t,e,i){void 0===t&&(t=null),void 0===e&&(e=r),void 0===i&&(i=...
function c (line 1) | function c(){document.querySelectorAll("[data-modal-target]").forEach((f...
function t (line 1) | function t(t,e,i,o){void 0===t&&(t=null),void 0===e&&(e=null),void 0===i...
function d (line 1) | function d(){document.querySelectorAll("[data-popover-target]").forEach(...
function t (line 1) | function t(t,e,i,a){void 0===t&&(t=null),void 0===e&&(e=[]),void 0===i&&...
function c (line 1) | function c(){document.querySelectorAll("[data-tabs-toggle]").forEach((fu...
function t (line 1) | function t(t,e,i,o){void 0===t&&(t=null),void 0===e&&(e=null),void 0===i...
function d (line 1) | function d(){document.querySelectorAll("[data-tooltip-target]").forEach(...
function t (line 1) | function t(t,e){void 0===e&&(e=[]),this._eventType=t,this._eventFunction...
function t (line 1) | function t(){this._instances={Accordion:{},Carousel:{},Collapse:{},Dial:...
function i (line 1) | function i(n){var o=e[n];if(void 0!==o)return o.exports;var r=e[n]={expo...
FILE: src/staticfiles/htmx.min.23806a07aa01.js
function e (line 1) | function e(e,t=false){return new RegExp(`<${e}(\\s[^>]*>|>)([\\s\\S]*?)<...
function d (line 1) | function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)...
function ee (line 1) | function ee(e,t){return e.getAttribute&&e.getAttribute(t)}
function o (line 1) | function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribut...
function te (line 1) | function te(e,t){return ee(e,t)||ee(e,"data-"+t)}
function u (line 1) | function u(e){return e.parentElement}
function re (line 1) | function re(){return document}
function c (line 1) | function c(e,t){while(e&&!t(e)){e=u(e)}return e?e:null}
function L (line 1) | function L(e,t,r){var n=te(t,r);var i=te(t,"hx-disinherit");if(e!==t&&i&...
function ne (line 1) | function ne(t,r){var n=null;c(t,function(e){return n=L(t,e,r)});if(n!=="...
function h (line 1) | function h(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector|...
function A (line 1) | function A(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(...
function a (line 1) | function a(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html...
function N (line 1) | function N(e){return/<body/.test(e)}
function l (line 1) | function l(e){var t=!N(e);var r=A(e);var n=e;if(r==="head"){n=n.replace(...
function ie (line 1) | function ie(e){if(e){e()}}
function I (line 1) | function I(e,t){return Object.prototype.toString.call(e)==="[object "+t+...
function k (line 1) | function k(e){return I(e,"Function")}
function P (line 1) | function P(e){return I(e,"Object")}
function ae (line 1) | function ae(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}re...
function M (line 1) | function M(e){var t=[];if(e){for(var r=0;r<e.length;r++){t.push(e[r])}}r...
function oe (line 1) | function oe(e,t){if(e){for(var r=0;r<e.length;r++){t(e[r])}}}
function X (line 1) | function X(e){var t=e.getBoundingClientRect();var r=t.top;var n=t.bottom...
function se (line 1) | function se(e){if(e.getRootNode&&e.getRootNode()instanceof window.Shadow...
function D (line 1) | function D(e){return e.trim().split(/\s+/)}
function le (line 1) | function le(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}retu...
function E (line 1) | function E(e){try{return JSON.parse(e)}catch(e){b(e);return null}}
function U (line 1) | function U(){var e="htmx:localStorageTest";try{localStorage.setItem(e,e)...
function B (line 1) | function B(t){try{var e=new URL(t);if(e){t=e.pathname+e.search}if(!/^\/$...
function t (line 1) | function t(e){return Tr(re().body,function(){return eval(e)})}
function F (line 1) | function F(t){var e=Q.on("htmx:load",function(e){t(e.detail.elt)});retur...
function V (line 1) | function V(){Q.logger=function(e,t,r){if(console){console.log(t,e,r)}}}
function j (line 1) | function j(){Q.logger=null}
function C (line 1) | function C(e,t){if(t){return e.querySelector(t)}else{return C(re(),e)}}
function f (line 1) | function f(e,t){if(t){return e.querySelectorAll(t)}else{return f(re(),e)}}
function _ (line 1) | function _(e,t){e=g(e);if(t){setTimeout(function(){_(e);e=null},t)}else{...
function z (line 1) | function z(e,t,r){e=g(e);if(r){setTimeout(function(){z(e,t);e=null},r)}e...
function n (line 1) | function n(e,t,r){e=g(e);if(r){setTimeout(function(){n(e,t);e=null},r)}e...
function $ (line 1) | function $(e,t){e=g(e);e.classList.toggle(t)}
function W (line 1) | function W(e,t){e=g(e);oe(e.parentElement.children,function(e){n(e,t)});...
function v (line 1) | function v(e,t){e=g(e);if(e.closest){return e.closest(t)}else{do{if(e==n...
function s (line 1) | function s(e,t){return e.substring(0,t.length)===t}
function G (line 1) | function G(e,t){return e.substring(e.length-t.length)===t}
function J (line 1) | function J(e){var t=e.trim();if(s(t,"<")&&G(t,"/>")){return t.substring(...
function Z (line 1) | function Z(e,t){if(t.indexOf("closest ")===0){return[v(e,J(t.substr(8)))...
function ue (line 1) | function ue(e,t){if(t){return Z(e,t)[0]}else{return Z(re().body,e)[0]}}
function g (line 1) | function g(e){if(I(e,"String")){return C(e)}else{return e}}
function ve (line 1) | function ve(e,t,r){if(k(t)){return{target:re().body,event:e,listener:t}}...
function de (line 1) | function de(t,r,n){jr(function(){var e=ve(t,r,n);e.target.addEventListen...
function ge (line 1) | function ge(t,r,n){jr(function(){var e=ve(t,r,n);e.target.removeEventLis...
function pe (line 1) | function pe(e,t){var r=ne(e,t);if(r){if(r==="this"){return[xe(e,t)]}else...
function xe (line 1) | function xe(e,t){return c(e,function(e){return te(e,t)!=null})}
function ye (line 1) | function ye(e){var t=ne(e,"hx-target");if(t){if(t==="this"){return xe(e,...
function be (line 1) | function be(e){var t=Q.config.attributesToSettle;for(var r=0;r<t.length;...
function we (line 1) | function we(t,r){oe(t.attributes,function(e){if(!r.hasAttribute(e.name)&...
function Se (line 1) | function Se(e,t){var r=Fr(t);for(var n=0;n<r.length;n++){var i=r[n];try{...
function Ee (line 1) | function Ee(e,i,a){var t="#"+ee(i,"id");var o="outerHTML";if(e==="true")...
function Ce (line 1) | function Ce(e,t,r){var n=ne(e,"hx-select-oob");if(n){var i=n.split(",");...
function Re (line 1) | function Re(e){oe(f(e,"[hx-preserve], [data-hx-preserve]"),function(e){v...
function Te (line 1) | function Te(o,e,s){oe(e.querySelectorAll("[id]"),function(e){var t=ee(e,...
function Oe (line 1) | function Oe(e){return function(){n(e,Q.config.addedClass);zt(e);Nt(e);qe...
function qe (line 1) | function qe(e){var t="[autofocus]";var r=h(e,t)?e:e.querySelector(t);if(...
function m (line 1) | function m(e,t,r,n){Te(e,r,n);while(r.childNodes.length>0){var i=r.first...
function He (line 1) | function He(e,t){var r=0;while(r<e.length){t=(t<<5)-t+e.charCodeAt(r++)|...
function Le (line 1) | function Le(e){var t=0;if(e.attributes){for(var r=0;r<e.attributes.lengt...
function Ae (line 1) | function Ae(e){var t=ae(e);if(t.onHandlers){for(var r=0;r<t.onHandlers.l...
function Ne (line 1) | function Ne(e){var t=ae(e);if(t.timeout){clearTimeout(t.timeout)}if(t.we...
function p (line 1) | function p(e){ce(e,"htmx:beforeCleanupElement");Ne(e);if(e.children){oe(...
function Ie (line 1) | function Ie(t,e,r){if(t.tagName==="BODY"){return Ue(t,e,r)}else{var n;va...
function ke (line 1) | function ke(e,t,r){return m(e,e.firstChild,t,r)}
function Pe (line 1) | function Pe(e,t,r){return m(u(e),e,t,r)}
function Me (line 1) | function Me(e,t,r){return m(e,null,t,r)}
function Xe (line 1) | function Xe(e,t,r){return m(u(e),e.nextSibling,t,r)}
function De (line 1) | function De(e,t,r){p(e);return u(e).removeChild(e)}
function Ue (line 1) | function Ue(e,t,r){var n=e.firstChild;m(e,n,t,r);if(n){while(n.nextSibli...
function Be (line 1) | function Be(e,t,r){var n=r||ne(e,"hx-select");if(n){var i=re().createDoc...
function Fe (line 1) | function Fe(e,t,r,n,i){switch(e){case"none":return;case"outerHTML":Ie(r,...
function Ve (line 1) | function Ve(e){if(e.indexOf("<title")>-1){var t=e.replace(H,"");var r=t....
function je (line 1) | function je(e,t,r,n,i,a){i.title=Ve(n);var o=l(n);if(o){Ce(r,o,i);o=Be(r...
function _e (line 1) | function _e(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){v...
function Ye (line 1) | function Ye(e){var t=[];var r=0;while(r<e.length){if($e.exec(e.charAt(r)...
function Qe (line 1) | function Qe(e,t,r){return $e.exec(e.charAt(0))&&e!=="true"&&e!=="false"&...
function et (line 1) | function et(e,t,r){if(t[0]==="["){t.shift();var n=1;var i=" return (func...
function y (line 1) | function y(e,t){var r="";while(e.length>0&&!t.test(e[0])){r+=e.shift()}r...
function tt (line 1) | function tt(e){var t;if(e.length>0&&Ze.test(e[0])){e.shift();t=y(e,Ke).t...
function nt (line 1) | function nt(e,t,r){var n=[];var i=Ye(t);do{y(i,Je);var a=i.length;var o=...
function it (line 1) | function it(e){var t=te(e,"hx-trigger");var r=[];if(t){var n=Q.config.tr...
function at (line 1) | function at(e){ae(e).cancelled=true}
function ot (line 1) | function ot(e,t,r){var n=ae(e);n.timeout=setTimeout(function(){if(se(e)&...
function st (line 1) | function st(e){return location.hostname===e.hostname&&ee(e,"href")&&ee(e...
function lt (line 1) | function lt(t,r,e){if(t.tagName==="A"&&st(t)&&(t.target===""||t.target==...
function ut (line 1) | function ut(e,t){if(e.type==="submit"||e.type==="click"){if(t.tagName===...
function ft (line 1) | function ft(e,t){return ae(e).boosted&&e.tagName==="A"&&t.type==="click"...
function ct (line 1) | function ct(e,t,r){var n=e.eventFilter;if(n){try{return n.call(t,r)!==tr...
function ht (line 1) | function ht(a,o,e,s,l){var u=ae(a);var t;if(s.from){t=Z(a,s.from)}else{t...
function gt (line 1) | function gt(){if(!dt){dt=function(){vt=true};window.addEventListener("sc...
function mt (line 1) | function mt(t){if(!o(t,"data-hx-revealed")&&X(t)){t.setAttribute("data-h...
function pt (line 1) | function pt(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].spl...
function xt (line 1) | function xt(s,r,n){if(!se(s)){return}if(r.indexOf("/")==0){var e=locatio...
function yt (line 1) | function yt(e){if(!se(e)){ae(e).webSocket.close();return true}}
function bt (line 1) | function bt(u){var f=c(u,function(e){return ae(e).webSocket!=null});if(f...
function wt (line 1) | function wt(e){var t=Q.config.wsReconnectDelay;if(typeof t==="function")...
function St (line 1) | function St(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].spl...
function Et (line 1) | function Et(t,e){var r=Q.createEventSource(e);r.onerror=function(e){fe(t...
function Ct (line 1) | function Ct(a,o){var s=c(a,Ot);if(s){var l=ae(s).sseEventSource;var u=fu...
function Rt (line 1) | function Rt(e,t,r){var n=c(e,Ot);if(n){var i=ae(n).sseEventSource;var a=...
function Tt (line 1) | function Tt(e){if(!se(e)){ae(e).sseEventSource.close();return true}}
function Ot (line 1) | function Ot(e){return ae(e).sseEventSource!=null}
function qt (line 1) | function qt(e,t,r,n){var i=function(){if(!r.loaded){r.loaded=true;t(e)}}...
function Ht (line 1) | function Ht(t,i,e){var a=false;oe(w,function(r){if(o(t,"hx-"+r)){var n=t...
function Lt (line 1) | function Lt(n,e,t,r){if(e.sseEvent){Rt(n,r,e.sseEvent)}else if(e.trigger...
function At (line 1) | function At(e){if(Q.config.allowScriptTags&&(e.type==="text/javascript"|...
function Nt (line 1) | function Nt(e){if(h(e,"script")){At(e)}oe(f(e,"script"),function(e){At(e...
function It (line 1) | function It(e){var t=e.attributes;for(var r=0;r<t.length;r++){var n=t[r]...
function kt (line 1) | function kt(e){var t=null;var r=[];if(It(e)){r.push(e)}if(document.evalu...
function Pt (line 1) | function Pt(e){if(e.querySelectorAll){var t=", [hx-boost] a, [data-hx-bo...
function Mt (line 1) | function Mt(e){var t=v(e.target,"button, input[type='submit']");var r=Dt...
function Xt (line 1) | function Xt(e){var t=Dt(e);if(t){t.lastButtonClicked=null}}
function Dt (line 1) | function Dt(e){var t=v(e.target,"button, input[type='submit']");if(!t){r...
function Ut (line 1) | function Ut(e){e.addEventListener("click",Mt);e.addEventListener("focusi...
function Bt (line 1) | function Bt(e){var t=Ye(e);var r=0;for(var n=0;n<t.length;n++){const i=t...
function Ft (line 1) | function Ft(t,e,r){var n=ae(t);if(!Array.isArray(n.onHandlers)){n.onHand...
function Vt (line 1) | function Vt(e){var t=te(e,"hx-on");if(t){var r={};var n=t.split("\n");va...
function jt (line 1) | function jt(e){Ae(e);for(var t=0;t<e.attributes.length;t++){var r=e.attr...
function _t (line 1) | function _t(t){if(v(t,Q.config.disableSelector)){p(t);return}var r=ae(t)...
function zt (line 1) | function zt(e){e=g(e);if(v(e,Q.config.disableSelector)){p(e);return}_t(e...
function $t (line 1) | function $t(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCas...
function Wt (line 1) | function Wt(e,t){var r;if(window.CustomEvent&&typeof window.CustomEvent=...
function fe (line 1) | function fe(e,t,r){ce(e,t,le({error:t},r))}
function Gt (line 1) | function Gt(e){return e==="htmx:afterProcessNode"}
function R (line 1) | function R(e,t){oe(Fr(e),function(e){try{t(e)}catch(e){b(e)}})}
function b (line 1) | function b(e){if(console.error){console.error(e)}else if(console.log){co...
function ce (line 1) | function ce(e,t,r){e=g(e);if(r==null){r={}}r["elt"]=e;var n=Wt(t,r);if(Q...
function Zt (line 1) | function Zt(){var e=re().querySelector("[hx-history-elt],[data-hx-histor...
function Kt (line 1) | function Kt(e,t,r,n){if(!U()){return}if(Q.config.historyCacheSize<=0){lo...
function Yt (line 1) | function Yt(e){if(!U()){return null}e=B(e);var t=E(localStorage.getItem(...
function Qt (line 1) | function Qt(e){var t=Q.config.requestClass;var r=e.cloneNode(true);oe(f(...
function er (line 1) | function er(){var e=Zt();var t=Jt||location.pathname+location.search;var...
function tr (line 1) | function tr(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\.htmx\....
function rr (line 1) | function rr(e){if(Q.config.historyEnabled)history.replaceState({htmx:tru...
function nr (line 1) | function nr(e){oe(e,function(e){e.call()})}
function ir (line 1) | function ir(a){var e=new XMLHttpRequest;var o={path:a,xhr:e};ce(re().bod...
function ar (line 1) | function ar(e){er();e=e||location.pathname+location.search;var t=Yt(e);i...
function or (line 1) | function or(e){var t=pe(e,"hx-indicator");if(t==null){t=[e]}oe(t,functio...
function sr (line 1) | function sr(e){var t=pe(e,"hx-disabled-elt");if(t==null){t=[]}oe(t,funct...
function lr (line 1) | function lr(e,t){oe(e,function(e){var t=ae(e);t.requestCount=(t.requestC...
function ur (line 1) | function ur(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(n.isSameNode(...
function fr (line 1) | function fr(e){if(e.name===""||e.name==null||e.disabled||v(e,"fieldset[d...
function cr (line 1) | function cr(e,t,r){if(e!=null&&t!=null){var n=r[e];if(n===undefined){r[e...
function hr (line 1) | function hr(t,r,n,e,i){if(e==null||ur(t,e)){return}else{t.push(e)}if(fr(...
function vr (line 1) | function vr(e,t){if(e.willValidate){ce(e,"htmx:validation:validate");if(...
function dr (line 1) | function dr(e,t){var r=[];var n={};var i={};var a=[];var o=ae(e);if(o.la...
function gr (line 1) | function gr(e,t,r){if(e!==""){e+="&"}if(String(r)==="[object Object]"){r...
function mr (line 1) | function mr(e){var t="";for(var r in e){if(e.hasOwnProperty(r)){var n=e[...
function pr (line 1) | function pr(e){var t=new FormData;for(var r in e){if(e.hasOwnProperty(r)...
function xr (line 1) | function xr(e,t,r){var n={"HX-Request":"true","HX-Trigger":ee(e,"id"),"H...
function yr (line 1) | function yr(t,e){var r=ne(e,"hx-params");if(r){if(r==="none"){return{}}e...
function br (line 1) | function br(e){return ee(e,"href")&&ee(e,"href").indexOf("#")>=0}
function wr (line 1) | function wr(e,t){var r=t?t:ne(e,"hx-swap");var n={swapStyle:ae(e).booste...
function Sr (line 1) | function Sr(e){return ne(e,"hx-encoding")==="multipart/form-data"||h(e,"...
function Er (line 1) | function Er(t,r,n){var i=null;R(r,function(e){if(i==null){i=e.encodePara...
function T (line 1) | function T(e){return{tasks:[],elts:[e]}}
function Cr (line 1) | function Cr(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;...
function Rr (line 1) | function Rr(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=te(e,t)...
function Tr (line 1) | function Tr(e,t,r){if(Q.config.allowEval){return t()}else{fe(e,"htmx:eva...
function Or (line 1) | function Or(e,t){return Rr(e,"hx-vars",true,t)}
function qr (line 1) | function qr(e,t){return Rr(e,"hx-vals",false,t)}
function Hr (line 1) | function Hr(e){return le(Or(e),qr(e))}
function Lr (line 1) | function Lr(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.s...
function Ar (line 1) | function Ar(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new...
function O (line 1) | function O(e,t){return t.test(e.getAllResponseHeaders())}
function Nr (line 1) | function Nr(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||I(r,...
function Ir (line 1) | function Ir(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}
function kr (line 1) | function kr(e,t,r){var n;var i;if(typeof URL==="function"){i=new URL(t,d...
function he (line 1) | function he(t,r,n,i,a,e){var o=null;var s=null;a=a!=null?a:{};if(a.retur...
function Pr (line 1) | function Pr(e,t){var r=t.xhr;var n=null;var i=null;if(O(r,/HX-Push:/i)){...
function Mr (line 1) | function Mr(l,u){var f=u.xhr;var c=u.target;var e=u.etc;var t=u.requestC...
function Dr (line 1) | function Dr(){return{init:function(e){return null},onEvent:function(e,t)...
function Ur (line 1) | function Ur(e,t){if(t.init){t.init(r)}Xr[e]=le(Dr(),t)}
function Br (line 1) | function Br(e){delete Xr[e]}
function Fr (line 1) | function Fr(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n=...
function jr (line 1) | function jr(e){if(Vr||re().readyState==="complete"){e()}else{re().addEve...
function _r (line 1) | function _r(){if(Q.config.includeIndicatorStyles!==false){re().head.inse...
function zr (line 1) | function zr(){var e=re().querySelector('meta[name="htmx-config"]');if(e)...
function $r (line 1) | function $r(){var e=zr();if(e){Q.config=le(Q.config,e)}}
FILE: src/staticfiles/infinite_scroll/table.624e6ab16a01.py
class TableInfiniteScrollComponent (line 8) | class TableInfiniteScrollComponent(component.Component):
method get_context_data (line 30) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/infinite_scroll/table.c757f118a80a.py
class TableInfiniteScrollComponent (line 8) | class TableInfiniteScrollComponent(component.Component):
method get_context_data (line 30) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/infinite_scroll/table.py
class TableInfiniteScrollComponent (line 8) | class TableInfiniteScrollComponent(component.Component):
method get_context_data (line 30) | def get_context_data(self, **kwargs):
FILE: src/staticfiles/infinite_scroll/tbody.02a65ee11b28.py
class TBodyInfiniteScrollComponent (line 8) | class TBodyInfiniteScrollComponent(component.Component):
method get_context_data (line 26) | def get_context_data(self, page_obj, **kwargs):
method get (line 29) | def get(self, request, page, **kwargs):
FILE: src/staticfiles/infinite_scroll/tbody.889ea8380c38.py
class TBodyInfiniteScrollComponent (line 8) | class TBodyInfiniteScrollComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, page_obj, **kwargs):
method get (line 30) | def get(self, request, page, **kwargs):
FILE: src/staticfiles/infinite_scroll/tbody.bbb8483b7598.py
class TBodyInfiniteScrollComponent (line 9) | class TBodyInfiniteScrollComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, page_obj, **kwargs):
method get (line 30) | def get(self, request, page, **kwargs):
FILE: src/staticfiles/infinite_scroll/tbody.py
class TBodyInfiniteScrollComponent (line 8) | class TBodyInfiniteScrollComponent(component.Component):
method get_context_data (line 27) | def get_context_data(self, page_obj, **kwargs):
method get (line 30) | def get(self, request, page, **kwargs):
FILE: src/staticfiles/inline_validation/form.17ae9d61f48e.py
class FormInlineValidationComponent (line 7) | class FormInlineValidationComponent(component.Component):
method get_context_data (line 29) | def get_context_data(self, **kwargs):
method post (line 33) | def post(self, request, *args, **kwargs):
FILE: src/staticfiles/inline_validation/form.py
class FormInlineValidationComponent (line 7) | class FormInlineValidationComponent(component.Component):
method get_context_data (line 29) | def get_context_data(self, **kwargs):
method post (line 33) | def post(self, request, *args, **kwargs):
FILE: src/staticfiles/inline_validation/forms.fdf8f5825f8b.py
function htmx_inline_validated_input_widget_factory (line 6) | def htmx_inline_validated_input_widget_factory(base_widget_class):
class HtmxFormBase (line 30) | class HtmxFormBase(forms.Form):
method __init__ (line 33) | def __init__(self, *args, **kwargs):
class InlineValidationForm (line 58) | class InlineValidationForm(HtmxFormBase):
FILE: src/staticfiles/inline_validation/forms.py
function htmx_inline_validated_input_widget_factory (line 6) | def htmx_inline_validated_input_widget_factory(base_widget_class):
class HtmxFormBase (line 30) | class HtmxFormBase(forms.Form):
method __init__ (line 33) | def __init__(self, *args, **kwargs):
class InlineValidationForm (line 58) | class InlineValidationForm(HtmxFormBase):
FILE: src/staticfiles/inline_validation/input.1fc6025d3995.py
class InputInlineValidationComponent (line 5) | class InputInlineValidationComponent(component.Component):
FILE: src/staticfiles/inline_validation/input.py
class InputInlineValidationComponent (line 5) | class InputInlineValidationComponent(component.Component):
FILE: src/staticfiles/prism.167e3bcdc317.js
function u (line 3) | function u(e){s.highlightedCode=e,a.hooks.run("before-insert",s),s.eleme...
function i (line 3) | function i(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=...
function l (line 3) | function l(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a...
function o (line 3) | function o(e,n,t,r,s,g){for(var f in t)if(t.hasOwnProperty(f)&&t[f]){var...
function s (line 3) | function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e...
function u (line 3) | function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a...
function c (line 3) | function c(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;n.ne...
function f (line 3) | function f(){a.manual||a.highlightAll()}
function r (line 9) | function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getCo...
function n (line 11) | function n(t){this.defaults=e({},t)}
function r (line 11) | function r(e){for(var t=0,n=0;n<e.length;++n)e.charCodeAt(n)=="\t".charC...
function t (line 13) | function t(t){var e=document.createElement("textarea");e.value=t.getText...
function i (line 13) | function i(){setTimeout((function(){u("copy")}),n["copy-timeout"])}
function u (line 13) | function u(t){r.textContent=n[t],c.setAttribute("data-copy-state",t)}
FILE: src/staticfiles/prism.js
function u (line 3) | function u(e){s.highlightedCode=e,a.hooks.run("before-insert",s),s.eleme...
function i (line 3) | function i(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=...
function l (line 3) | function l(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a...
function o (line 3) | function o(e,n,t,r,s,g){for(var f in t)if(t.hasOwnProperty(f)&&t[f]){var...
function s (line 3) | function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e...
function u (line 3) | function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a...
function c (line 3) | function c(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;n.ne...
function f (line 3) | function f(){a.manual||a.highlightAll()}
function r (line 9) | function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getCo...
function n (line 11) | function n(t){this.defaults=e({},t)}
function r (line 11) | function r(e){for(var t=0,n=0;n<e.length;++n)e.charCodeAt(n)=="\t".charC...
function t (line 13) | function t(t){var e=document.createElement("textarea");e.value=t.getText...
function i (line 13) | function i(){setTimeout((function(){u("copy")}),n["copy-timeout"])}
function u (line 13) | function u(t){r.textContent=n[t],c.setAttribute("data-copy-state",t)}
FILE: src/staticfiles/progress_bar/bar.b8a3e8689aaa.py
class BarProgressBarComponent (line 7) | class BarProgressBarComponent(component.Component):
method get_context_data (line 50) | def get_context_data(self, id, **kwargs):
method get (line 54) | def get(self, request, id, **kwargs):
FILE: src/staticfiles/progress_bar/bar.py
class BarProgressBarComponent (line 7) | class BarProgressBarComponent(component.Component):
method get_context_data (line 50) | def get_context_data(self, id, **kwargs):
method get (line 54) | def get(self, request, id, **kwargs):
FILE: src/staticfiles/progress_bar/start.a6c80516bd2f.py
class StartProgressBar (line 5) | class StartProgressBar(component.Component):
FILE: src/staticfiles/progress_bar/start.py
class StartProgressBar (line 5) | class StartProgressBar(component.Component):
FILE: src/staticfiles/progress_bar/status.11892046b39b.py
class StatusProgressBarComponent (line 7) | class StatusProgressBarComponent(component.Component):
method get (line 26) | def get(self, request, id, **kwargs):
method post (line 30) | def post(self, request, **kwargs):
FILE: src/staticfiles/progress_bar/status.6f3dc147a08a.py
class StatusProgressBarComponent (line 7) | class StatusProgressBarComponent(component.Component):
method get (line 26) | def get(self, request, id, **kwargs):
method post (line 30) | def post(self, request, **kwargs):
FILE: src/staticfiles/progress_bar/status.8ddef869643a.py
class StatusProgressBarComponent (line 7) | class StatusProgressBarComponent(component.Component):
method get (line 26) | def get(self, request, id, **kwargs):
method post (line 30) | def post(self, request, **kwargs):
FILE: src/staticfiles/progress_bar/status.py
class StatusProgressBarComponent (line 7) | class StatusProgressBarComponent(component.Component):
method get (line 26) | def get(self, request, id, **kwargs):
method post (line 30) | def post(self, request, **kwargs):
FILE: src/staticfiles/ws.d96b2cd51173.js
function splitOnWhitespace (line 68) | function splitOnWhitespace(trigger) {
function getLegacyWebsocketURL (line 72) | function getLegacyWebsocketURL(elt) {
function ensureWebSocket (line 91) | function ensureWebSocket(socketElt) {
function createWebsocketWrapper (line 178) | function createWebsocketWrapper(socketElt, socketFunc) {
function ensureWebSocketSend (line 308) | function ensureWebSocketSend(elt) {
function hasWebSocket (line 323) | function hasWebSocket(node) {
function processWebSocketSend (line 333) | function processWebSocketSend(socketElt, sendElt) {
function getWebSocketReconnectDelay (line 394) | function getWebSocketReconnectDelay(retryCount) {
function maybeCloseWebSocketSource (line 419) | function maybeCloseWebSocketSource(elt) {
function createWebSocket (line 434) | function createWebSocket(url) {
function queryAttributeOnThisOrChildren (line 446) | function queryAttributeOnThisOrChildren(elt, attributeName) {
function forEach (line 468) | function forEach(arr, func) {
FILE: src/staticfiles/ws.js
function splitOnWhitespace (line 68) | function splitOnWhitespace(trigger) {
function getLegacyWebsocketURL (line 72) | function getLegacyWebsocketURL(elt) {
function ensureWebSocket (line 91) | function ensureWebSocket(socketElt) {
function createWebsocketWrapper (line 178) | function createWebsocketWrapper(socketElt, socketFunc) {
function ensureWebSocketSend (line 308) | function ensureWebSocketSend(elt) {
function hasWebSocket (line 323) | function hasWebSocket(node) {
function processWebSocketSend (line 333) | function processWebSocketSend(socketElt, sendElt) {
function getWebSocketReconnectDelay (line 394) | function getWebSocketReconnectDelay(retryCount) {
function maybeCloseWebSocketSource (line 419) | function maybeCloseWebSocketSource(elt) {
function createWebSocket (line 434) | function createWebSocket(url) {
function queryAttributeOnThisOrChildren (line 446) | function queryAttributeOnThisOrChildren(elt, attributeName) {
function forEach (line 468) | function forEach(arr, func) {
Condensed preview — 428 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,571K chars).
[
{
"path": ".gitignore",
"chars": 2438,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
},
{
"path": "LICENSE",
"chars": 1103,
"preview": "MIT License\n\nCopyright (c) 2022 Matt Butterfield\nCopyright (c) 2024 Iwana Labs\n\nPermission is hereby granted, free of ch"
},
{
"path": "Makefile",
"chars": 809,
"preview": "PROJECT_DIR=$(shell pwd)\nSRC_DIR=$(PROJECT_DIR)/src\nINPUT_DIR=$(PROJECT_DIR)/src/static/input\nOUTPUT_DIR=$(PROJECT_DIR)/"
},
{
"path": "README.md",
"chars": 2310,
"preview": "# Django HTMX Components\n\nThis is a collection of components for [Django](https://www.djangoproject.com/) and [htmx](htt"
},
{
"path": "package.json",
"chars": 188,
"preview": "{\n \"devDependencies\": {\n \"@tailwindcss/typography\": \"^0.5.10\",\n \"flowbite-typography\": \"^1.0.3\",\n \"tailwindcss"
},
{
"path": "pyproject.toml",
"chars": 658,
"preview": "[tool.poetry]\nname = \"django_htmx_components\"\nversion = \"0.1.0\"\ndescription = \"\"\nauthors = [\"Dylan Castillo <dylan@iwana"
},
{
"path": "src/app/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "src/app/admin.py",
"chars": 63,
"preview": "from django.contrib import admin\n\n# Register your models here.\n"
},
{
"path": "src/app/apps.py",
"chars": 138,
"preview": "from django.apps import AppConfig\n\n\nclass AppConfig(AppConfig):\n default_auto_field = \"django.db.models.BigAutoField\""
},
{
"path": "src/app/management/commands/clear_cache.py",
"chars": 282,
"preview": "from django.core.cache import cache\nfrom django.core.management.base import BaseCommand\n\n\nclass Command(BaseCommand):\n "
},
{
"path": "src/app/management/commands/regenerate_data.py",
"chars": 431,
"preview": "from django.core.management.base import BaseCommand\nfrom app.utils import create_contacts, create_brands_and_cars, delet"
},
{
"path": "src/app/migrations/0001_initial.py",
"chars": 2508,
"preview": "# Generated by Django 5.0.1 on 2024-01-31 21:59\n\nimport django.db.models.deletion\nfrom django.db import migrations, mode"
},
{
"path": "src/app/migrations/0002_init_data.py",
"chars": 575,
"preview": "# Generated by Django 5.0.1 on 2024-01-31 21:10\n\nfrom django.db import migrations\n\n\ndef create_initial_data(apps, schema"
},
{
"path": "src/app/migrations/0003_sitemap.py",
"chars": 440,
"preview": "from django.db import migrations\nfrom django.contrib.sites.models import Site\n\n\ndef create_site(apps, schema_editor):\n "
},
{
"path": "src/app/migrations/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "src/app/models.py",
"chars": 570,
"preview": "from django.db import models\n\n# Create your models here.\n\n\nclass Contact(models.Model):\n first_name = models.CharFiel"
},
{
"path": "src/app/sitemap.py",
"chars": 577,
"preview": "from django.contrib.sitemaps import Sitemap\nfrom django.urls import reverse\n\n\nclass StaticViewSitemap(Sitemap):\n prio"
},
{
"path": "src/app/tests.py",
"chars": 60,
"preview": "from django.test import TestCase\n\n# Create your tests here.\n"
},
{
"path": "src/app/urls.py",
"chars": 819,
"preview": "from django.urls import path\n\nfrom app import views\n\nurlpatterns = [\n path(\"\", views.index, name=\"index\"),\n path(\""
},
{
"path": "src/app/utils.py",
"chars": 18979,
"preview": "from app.models import Contact, Brand, CarModel\n\ncontacts_list = [\n {\n \"id\": 1,\n \"first_name\": \"Kathy\","
},
{
"path": "src/app/views.py",
"chars": 8153,
"preview": "from django.shortcuts import render, resolve_url\n\nfrom app.models import Contact\nfrom app.utils import source_link\n\n\ndef"
},
{
"path": "src/components/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "src/components/active_search/input.py",
"chars": 911,
"preview": "from django_components import component\n\n\n@component.register(\"input_active_search\")\nclass InputActiveSearchComponent(co"
},
{
"path": "src/components/active_search/tbody.py",
"chars": 950,
"preview": "from django_components import component\n\nfrom app.models import Contact\n\n\n@component.register(\"tbody_active_search\")\ncla"
},
{
"path": "src/components/active_search/urls.py",
"chars": 237,
"preview": "from django.urls import path\n\nfrom components.active_search.tbody import TBodyActiveSearchComponent\n\nurlpatterns = [\n "
},
{
"path": "src/components/bulk_update/table.py",
"chars": 1579,
"preview": "from django_components import component\n\nfrom django.middleware.csrf import get_token\n\nfrom app.models import Contact\n\n\n"
},
{
"path": "src/components/bulk_update/tbody.py",
"chars": 1627,
"preview": "from django_components import component\n\nfrom app.models import Contact\n\n\n@component.register(\"tbody_bulk_update\")\nclass"
},
{
"path": "src/components/bulk_update/urls.py",
"chars": 246,
"preview": "from django.urls import path\n\nfrom components.bulk_update.tbody import TBodyBulkUpdateComponent\n\nurlpatterns = [\n pat"
},
{
"path": "src/components/cascading_selects/parent_select.py",
"chars": 1013,
"preview": "from typing import Any, Dict\nfrom django_components import component\n\nfrom app.models import Brand\n\n\n@component.register"
},
{
"path": "src/components/cascading_selects/select.py",
"chars": 713,
"preview": "from django_components import component\n\nfrom app.models import CarModel\n\n\n@component.register(\"select_cascading_selects"
},
{
"path": "src/components/cascading_selects/urls.py",
"chars": 258,
"preview": "from django.urls import path\n\nfrom components.cascading_selects.select import SelectCascadingSelectsComponent\n\n\nurlpatte"
},
{
"path": "src/components/click_to_edit.py",
"chars": 3041,
"preview": "from django_components import component\n\nfrom app.models import Contact\n\n\ndef build_context(contact, editing=False):\n "
},
{
"path": "src/components/click_to_load/table.py",
"chars": 889,
"preview": "from django.core.paginator import Paginator\nfrom django_components import component\n\nfrom app.models import Contact\n\n\n@c"
},
{
"path": "src/components/click_to_load/tbody.py",
"chars": 1583,
"preview": "from django.core.paginator import Paginator\nfrom django_components import component\n\nfrom app.models import Contact\n\n\n@c"
},
{
"path": "src/components/click_to_load/urls.py",
"chars": 247,
"preview": "from django.urls import path\n\nfrom components.click_to_load.tbody import TBodyClickToLoadComponent\n\nurlpatterns = [\n "
},
{
"path": "src/components/component_tabs/component_tabs.css",
"chars": 350,
"preview": "pre {\n font-size: 14px !important;\n max-height: 100vh;\n overflow: scroll;\n}\n\ndiv.code-toolbar > .toolbar {\n top: 0.8"
},
{
"path": "src/components/component_tabs/component_tabs.html",
"chars": 2896,
"preview": "{% load static %}\n<div class=\"flex flex-col items-center lg:items-start lg:flex-row lg:justify-between\">\n <div class="
},
{
"path": "src/components/component_tabs/component_tabs.js",
"chars": 1119,
"preview": "function updateTabs() {\n Prism.highlightAll();\n const tabsSelect = document.getElementById(\"tabs\");\n const contentTab"
},
{
"path": "src/components/component_tabs/component_tabs.py",
"chars": 304,
"preview": "from django_components import component\n\n\n@component.register(\"component_tabs\")\nclass ComponentTabsComponent(component.C"
},
{
"path": "src/components/delete_row.py",
"chars": 1729,
"preview": "from django.http import HttpResponse\nfrom django_components import component\n\nfrom app.models import Contact\n\n\n@componen"
},
{
"path": "src/components/edit_row/row.py",
"chars": 2971,
"preview": "from django_components import component\n\nfrom app.models import Contact\n\n\n@component.register(\"row_edit_row\")\nclass RowE"
},
{
"path": "src/components/edit_row/table.py",
"chars": 996,
"preview": "from django.http import HttpResponse\nfrom django_components import component\n\nfrom app.models import Contact\n\n\n@componen"
},
{
"path": "src/components/edit_row/urls.py",
"chars": 218,
"preview": "from django.urls import path\n\nfrom components.edit_row.row import RowEditRowComponent\n\nurlpatterns = [\n path(\n "
},
{
"path": "src/components/infinite_scroll/table.py",
"chars": 1065,
"preview": "from django.core.paginator import Paginator\nfrom django_components import component\n\nfrom app.models import Contact\n\n\n@c"
},
{
"path": "src/components/infinite_scroll/tbody.py",
"chars": 1229,
"preview": "from django.core.paginator import Paginator\nfrom django_components import component\n\nfrom app.models import Contact\n\n\n@c"
},
{
"path": "src/components/infinite_scroll/urls.py",
"chars": 257,
"preview": "from django.urls import path\n\nfrom components.infinite_scroll.tbody import TBodyInfiniteScrollComponent\n\nurlpatterns = ["
},
{
"path": "src/components/inline_validation/form.py",
"chars": 1087,
"preview": "from django_components import component\n\nfrom components.inline_validation.forms import InlineValidationForm\n\n\n@componen"
},
{
"path": "src/components/inline_validation/forms.py",
"chars": 2922,
"preview": "from django import forms\nfrom django.urls import reverse_lazy\nfrom components.inline_validation.input import InputInline"
},
{
"path": "src/components/inline_validation/input.py",
"chars": 2080,
"preview": "from django_components import component\n\n\n@component.register(\"input_inline_validation\")\nclass InputInlineValidationComp"
},
{
"path": "src/components/inline_validation/urls.py",
"chars": 242,
"preview": "from django.urls import path\n\nfrom components.inline_validation.form import FormInlineValidationComponent\n\nurlpatterns ="
},
{
"path": "src/components/progress_bar/bar.py",
"chars": 2115,
"preview": "from django.http import HttpResponse\nfrom django_components import component\nfrom app.models import Job\n\n\n@component.reg"
},
{
"path": "src/components/progress_bar/start.py",
"chars": 441,
"preview": "from django_components import component\n\n\n@component.register(\"start_progress_bar\")\nclass StartProgressBar(component.Com"
},
{
"path": "src/components/progress_bar/status.py",
"chars": 1204,
"preview": "from typing import Any, Dict\nfrom django_components import component\nfrom app.models import Job\n\n\n@component.register(\"s"
},
{
"path": "src/components/progress_bar/urls.py",
"chars": 562,
"preview": "from django.urls import path\n\nfrom components.progress_bar.bar import BarProgressBarComponent\nfrom components.progress_b"
},
{
"path": "src/components/urls.py",
"chars": 1117,
"preview": "from django.urls import include, path\nfrom components.click_to_edit import ClickToEditComponent\nfrom components.delete_r"
},
{
"path": "src/config/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "src/config/asgi.py",
"chars": 389,
"preview": "\"\"\"\nASGI config for config project.\n\nIt exposes the ASGI callable as a module-level variable named ``application``.\n\nFor"
},
{
"path": "src/config/settings.py",
"chars": 5339,
"preview": "\"\"\"\nDjango settings for config project.\n\nGenerated by 'django-admin startproject' using Django 4.1.1.\n\nFor more informat"
},
{
"path": "src/config/urls.py",
"chars": 1134,
"preview": "\"\"\"config URL Configuration\n\nThe `urlpatterns` list routes URLs to views. For more information please see:\n https://d"
},
{
"path": "src/config/wsgi.py",
"chars": 701,
"preview": "import os\n\nfrom django.core.wsgi import get_wsgi_application\nfrom django.db.backends.signals import connection_created\nf"
},
{
"path": "src/manage.py",
"chars": 662,
"preview": "#!/usr/bin/env python\n\"\"\"Django's command-line utility for administrative tasks.\"\"\"\nimport os\nimport sys\n\n\ndef main():\n "
},
{
"path": "src/static/input/style.css",
"chars": 4260,
"preview": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer components {\n .btn-primary {\n @apply text-white b"
},
{
"path": "src/static/output/preload.js",
"chars": 5322,
"preview": "// This adds the \"preload\" extension to htmx. By default, this will\n// preload the targets of any tags with `href` or `"
},
{
"path": "src/static/output/prism.css",
"chars": 3371,
"preview": "/* PrismJS 1.29.0\nhttps://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+python&pl"
},
{
"path": "src/static/output/prism.js",
"chars": 30146,
"preview": "/* PrismJS 1.29.0\nhttps://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+python&pl"
},
{
"path": "src/static/output/sse.js",
"chars": 0,
"preview": ""
},
{
"path": "src/static/output/style.css",
"chars": 61137,
"preview": "/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e"
},
{
"path": "src/static/output/ws.js",
"chars": 13630,
"preview": "/*\nWebSockets Extension\n============================\nThis extension adds support for WebSockets to htmx. See /www/exten"
},
{
"path": "src/staticfiles/__init__.d41d8cd98f00.py",
"chars": 0,
"preview": ""
},
{
"path": "src/staticfiles/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "src/staticfiles/_base.51249b9b3e6d.html",
"chars": 2472,
"preview": "{# djlint: off #}\n{% load static %}\n{% load django_htmx %}\n\n{% if not request.htmx %}\n <!DOCTYPE html>\n <html lang"
},
{
"path": "src/staticfiles/_base.9d44d0a966ee.html",
"chars": 2204,
"preview": "{% load static %}\n{% load django_htmx %}\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n "
},
{
"path": "src/staticfiles/_base.f222f8408fbe.html",
"chars": 2299,
"preview": "{% load static %}\n{% load django_htmx %}\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n "
},
{
"path": "src/staticfiles/_base.html",
"chars": 2472,
"preview": "{# djlint: off #}\n{% load static %}\n{% load django_htmx %}\n\n{% if not request.htmx %}\n <!DOCTYPE html>\n <html lang"
},
{
"path": "src/staticfiles/active_search/input.0d7f732a97de.py",
"chars": 911,
"preview": "from django_components import component\n\n\n@component.register(\"input_active_search\")\nclass InputActiveSearchComponent(co"
},
{
"path": "src/staticfiles/active_search/input.py",
"chars": 911,
"preview": "from django_components import component\n\n\n@component.register(\"input_active_search\")\nclass InputActiveSearchComponent(co"
},
{
"path": "src/staticfiles/active_search/tbody.46fe860010d3.py",
"chars": 950,
"preview": "from django_components import component\n\nfrom app.models import Contact\n\n\n@component.register(\"tbody_active_search\")\ncla"
},
{
"path": "src/staticfiles/active_search/tbody.py",
"chars": 950,
"preview": "from django_components import component\n\nfrom app.models import Contact\n\n\n@component.register(\"tbody_active_search\")\ncla"
},
{
"path": "src/staticfiles/active_search/urls.69d1718169f9.py",
"chars": 237,
"preview": "from django.urls import path\n\nfrom components.active_search.tbody import TBodyActiveSearchComponent\n\nurlpatterns = [\n "
},
{
"path": "src/staticfiles/active_search/urls.py",
"chars": 237,
"preview": "from django.urls import path\n\nfrom components.active_search.tbody import TBodyActiveSearchComponent\n\nurlpatterns = [\n "
},
{
"path": "src/staticfiles/active_search.78bab46ab4f3.html",
"chars": 300,
"preview": "{# djlint:off #}\n{% include \"_base.html\" %}\n{% block content %}\n {% component_block \"component_tabs\" %}\n {% fi"
},
{
"path": "src/staticfiles/active_search.78decbf8ff19.html",
"chars": 289,
"preview": "{# djlint:off #}\n{% include \"_base.html\" %}\n{% block content %}\n {% component \"component_tabs\" %}\n {% fill \"co"
},
{
"path": "src/staticfiles/active_search.html",
"chars": 289,
"preview": "{# djlint:off #}\n{% include \"_base.html\" %}\n{% block content %}\n {% component \"component_tabs\" %}\n {% fill \"co"
},
{
"path": "src/staticfiles/admin/css/autocomplete.4a81fc4242d0.css",
"chars": 9114,
"preview": "select.admin-autocomplete {\n width: 20em;\n}\n\n.select2-container--admin-autocomplete.select2-container {\n min-heigh"
},
{
"path": "src/staticfiles/admin/css/autocomplete.css",
"chars": 9114,
"preview": "select.admin-autocomplete {\n width: 20em;\n}\n\n.select2-container--admin-autocomplete.select2-container {\n min-heigh"
},
{
"path": "src/staticfiles/admin/css/base.6be58084bde8.css",
"chars": 21709,
"preview": "/*\n DJANGO Admin styles\n*/\n\n/* VARIABLE DEFINITIONS */\nhtml[data-theme=\"light\"],\n:root {\n --primary: #79aec8;\n "
},
{
"path": "src/staticfiles/admin/css/base.9f65b5cd54b3.css",
"chars": 21709,
"preview": "/*\n DJANGO Admin styles\n*/\n\n/* VARIABLE DEFINITIONS */\nhtml[data-theme=\"light\"],\n:root {\n --primary: #79aec8;\n "
},
{
"path": "src/staticfiles/admin/css/base.css",
"chars": 21544,
"preview": "/*\n DJANGO Admin styles\n*/\n\n/* VARIABLE DEFINITIONS */\nhtml[data-theme=\"light\"],\n:root {\n --primary: #79aec8;\n "
},
{
"path": "src/staticfiles/admin/css/changelists.47cb433b29d4.css",
"chars": 6807,
"preview": "/* CHANGELISTS */\n\n#changelist {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n}\n\n"
},
{
"path": "src/staticfiles/admin/css/changelists.css",
"chars": 6807,
"preview": "/* CHANGELISTS */\n\n#changelist {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n}\n\n"
},
{
"path": "src/staticfiles/admin/css/dark_mode.css",
"chars": 2682,
"preview": "@media (prefers-color-scheme: dark) {\n :root {\n --primary: #264b5d;\n --primary-fg: #f7f7f7;\n \n --body"
},
{
"path": "src/staticfiles/admin/css/dark_mode.e18e9a052429.css",
"chars": 2682,
"preview": "@media (prefers-color-scheme: dark) {\n :root {\n --primary: #264b5d;\n --primary-fg: #f7f7f7;\n \n --body"
},
{
"path": "src/staticfiles/admin/css/dashboard.css",
"chars": 441,
"preview": "/* DASHBOARD */\n.dashboard td, .dashboard th {\n word-break: break-word;\n}\n\n.dashboard .module table th {\n width: 1"
},
{
"path": "src/staticfiles/admin/css/dashboard.e90f2068217b.css",
"chars": 441,
"preview": "/* DASHBOARD */\n.dashboard td, .dashboard th {\n word-break: break-word;\n}\n\n.dashboard .module table th {\n width: 1"
},
{
"path": "src/staticfiles/admin/css/forms.b29a0c8c9155.css",
"chars": 9133,
"preview": "@import url(\"widgets.8a70ea6d8850.css\");\n\n/* FORM ROWS */\n\n.form-row {\n overflow: hidden;\n padding: 10px;\n font"
},
{
"path": "src/staticfiles/admin/css/forms.css",
"chars": 9090,
"preview": "@import url('widgets.css');\n\n/* FORM ROWS */\n\n.form-row {\n overflow: hidden;\n padding: 10px;\n font-size: 0.8125"
},
{
"path": "src/staticfiles/admin/css/login.586129c60a93.css",
"chars": 958,
"preview": "/* LOGIN FORM */\n\n.login {\n background: var(--darkened-bg);\n height: auto;\n}\n\n.login #header {\n height: auto;\n "
},
{
"path": "src/staticfiles/admin/css/login.css",
"chars": 958,
"preview": "/* LOGIN FORM */\n\n.login {\n background: var(--darkened-bg);\n height: auto;\n}\n\n.login #header {\n height: auto;\n "
},
{
"path": "src/staticfiles/admin/css/nav_sidebar.css",
"chars": 2810,
"preview": ".sticky {\n position: sticky;\n top: 0;\n max-height: 100vh;\n}\n\n.toggle-nav-sidebar {\n z-index: 20;\n left: 0"
},
{
"path": "src/staticfiles/admin/css/nav_sidebar.dd925738f4cc.css",
"chars": 2810,
"preview": ".sticky {\n position: sticky;\n top: 0;\n max-height: 100vh;\n}\n\n.toggle-nav-sidebar {\n z-index: 20;\n left: 0"
},
{
"path": "src/staticfiles/admin/css/responsive.css",
"chars": 17905,
"preview": "/* Tablets */\n\ninput[type=\"submit\"], button {\n -webkit-appearance: none;\n appearance: none;\n}\n\n@media (max-width: "
},
{
"path": "src/staticfiles/admin/css/responsive.eafb93ff084c.css",
"chars": 17905,
"preview": "/* Tablets */\n\ninput[type=\"submit\"], button {\n -webkit-appearance: none;\n appearance: none;\n}\n\n@media (max-width: "
},
{
"path": "src/staticfiles/admin/css/responsive_rtl.7d1130848605.css",
"chars": 1864,
"preview": "/* TABLETS */\n\n@media (max-width: 1024px) {\n [dir=\"rtl\"] .colMS {\n margin-right: 0;\n }\n\n [dir=\"rtl\"] #us"
},
{
"path": "src/staticfiles/admin/css/responsive_rtl.css",
"chars": 1864,
"preview": "/* TABLETS */\n\n@media (max-width: 1024px) {\n [dir=\"rtl\"] .colMS {\n margin-right: 0;\n }\n\n [dir=\"rtl\"] #us"
},
{
"path": "src/staticfiles/admin/css/rtl.aa92d763340b.css",
"chars": 5067,
"preview": "/* GLOBAL */\n\nth {\n text-align: right;\n}\n\n.module h2, .module caption {\n text-align: right;\n}\n\n.module ul, .module"
},
{
"path": "src/staticfiles/admin/css/rtl.css",
"chars": 4977,
"preview": "/* GLOBAL */\n\nth {\n text-align: right;\n}\n\n.module h2, .module caption {\n text-align: right;\n}\n\n.module ul, .module"
},
{
"path": "src/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md",
"chars": 1124,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors\n\nPermission is hereb"
},
{
"path": "src/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md",
"chars": 1124,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors\n\nPermission is hereb"
},
{
"path": "src/staticfiles/admin/css/vendor/select2/select2.a2194c262648.css",
"chars": 17358,
"preview": ".select2-container {\n box-sizing: border-box;\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-al"
},
{
"path": "src/staticfiles/admin/css/vendor/select2/select2.css",
"chars": 17358,
"preview": ".select2-container {\n box-sizing: border-box;\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-al"
},
{
"path": "src/staticfiles/admin/css/vendor/select2/select2.min.9f54e6414f87.css",
"chars": 14966,
"preview": ".select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-"
},
{
"path": "src/staticfiles/admin/css/widgets.8a70ea6d8850.css",
"chars": 12010,
"preview": "/* SELECTOR (FILTER INTERFACE) */\n\n.selector {\n display: flex;\n flex-grow: 1;\n gap: 0 10px;\n}\n\n.selector select"
},
{
"path": "src/staticfiles/admin/css/widgets.css",
"chars": 11800,
"preview": "/* SELECTOR (FILTER INTERFACE) */\n\n.selector {\n display: flex;\n flex-grow: 1;\n gap: 0 10px;\n}\n\n.selector select"
},
{
"path": "src/staticfiles/admin/img/LICENSE",
"chars": 1081,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Code Charm Ltd\n\nPermission is hereby granted, free of charge, to any person ob"
},
{
"path": "src/staticfiles/admin/img/LICENSE.2c54f4e1ca1c",
"chars": 1081,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Code Charm Ltd\n\nPermission is hereby granted, free of charge, to any person ob"
},
{
"path": "src/staticfiles/admin/img/README.a70711a38d87.txt",
"chars": 319,
"preview": "All icons are taken from Font Awesome (http://fontawesome.io/) project.\nThe Font Awesome font is licensed under the SIL "
},
{
"path": "src/staticfiles/admin/img/README.txt",
"chars": 319,
"preview": "All icons are taken from Font Awesome (http://fontawesome.io/) project.\nThe Font Awesome font is licensed under the SIL "
},
{
"path": "src/staticfiles/admin/js/SelectBox.7d3ce5a98007.js",
"chars": 4530,
"preview": "'use strict';\n{\n const SelectBox = {\n cache: {},\n init: function(id) {\n const box = document"
},
{
"path": "src/staticfiles/admin/js/SelectBox.js",
"chars": 4530,
"preview": "'use strict';\n{\n const SelectBox = {\n cache: {},\n init: function(id) {\n const box = document"
},
{
"path": "src/staticfiles/admin/js/SelectFilter2.b8cf7343ff9e.js",
"chars": 15492,
"preview": "/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/\n/*\nSelectFilter2 - Turns a multiple-select box in"
},
{
"path": "src/staticfiles/admin/js/SelectFilter2.js",
"chars": 15492,
"preview": "/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/\n/*\nSelectFilter2 - Turns a multiple-select box in"
},
{
"path": "src/staticfiles/admin/js/actions.867b023a736d.js",
"chars": 8059,
"preview": "/*global gettext, interpolate, ngettext*/\n'use strict';\n{\n function show(selector) {\n document.querySelectorAl"
},
{
"path": "src/staticfiles/admin/js/actions.js",
"chars": 8059,
"preview": "/*global gettext, interpolate, ngettext*/\n'use strict';\n{\n function show(selector) {\n document.querySelectorAl"
},
{
"path": "src/staticfiles/admin/js/admin/DateTimeShortcuts.9f6e209cebca.js",
"chars": 19319,
"preview": "/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/\n// Inser"
},
{
"path": "src/staticfiles/admin/js/admin/DateTimeShortcuts.js",
"chars": 19319,
"preview": "/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/\n// Inser"
},
{
"path": "src/staticfiles/admin/js/admin/RelatedObjectLookups.ef211845e458.js",
"chars": 9042,
"preview": "/*global SelectBox, interpolate*/\n// Handles related-objects functionality: lookup link for raw_id_fields\n// and Add Ano"
},
{
"path": "src/staticfiles/admin/js/admin/RelatedObjectLookups.js",
"chars": 9042,
"preview": "/*global SelectBox, interpolate*/\n// Handles related-objects functionality: lookup link for raw_id_fields\n// and Add Ano"
},
{
"path": "src/staticfiles/admin/js/autocomplete.01591ab27be7.js",
"chars": 1060,
"preview": "'use strict';\n{\n const $ = django.jQuery;\n\n $.fn.djangoAdminSelect2 = function() {\n $.each(this, function(i"
},
{
"path": "src/staticfiles/admin/js/autocomplete.js",
"chars": 1060,
"preview": "'use strict';\n{\n const $ = django.jQuery;\n\n $.fn.djangoAdminSelect2 = function() {\n $.each(this, function(i"
},
{
"path": "src/staticfiles/admin/js/calendar.d64496bbf46d.js",
"chars": 9141,
"preview": "/*global gettext, pgettext, get_format, quickElement, removeChildren*/\n/*\ncalendar.js - Calendar functions by Adrian Hol"
},
{
"path": "src/staticfiles/admin/js/calendar.js",
"chars": 9141,
"preview": "/*global gettext, pgettext, get_format, quickElement, removeChildren*/\n/*\ncalendar.js - Calendar functions by Adrian Hol"
},
{
"path": "src/staticfiles/admin/js/cancel.ecc4c5ca7b32.js",
"chars": 884,
"preview": "'use strict';\n{\n // Call function fn when the DOM is loaded and ready. If it is already\n // loaded, call the funct"
},
{
"path": "src/staticfiles/admin/js/cancel.js",
"chars": 884,
"preview": "'use strict';\n{\n // Call function fn when the DOM is loaded and ready. If it is already\n // loaded, call the funct"
},
{
"path": "src/staticfiles/admin/js/change_form.9d8ca4f96b75.js",
"chars": 606,
"preview": "'use strict';\n{\n const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];\n const modelName = document.getEleme"
},
{
"path": "src/staticfiles/admin/js/change_form.js",
"chars": 606,
"preview": "'use strict';\n{\n const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];\n const modelName = document.getEleme"
},
{
"path": "src/staticfiles/admin/js/collapse.f84e7410290f.js",
"chars": 1803,
"preview": "/*global gettext*/\n'use strict';\n{\n window.addEventListener('load', function() {\n // Add anchor tag for Show/H"
},
{
"path": "src/staticfiles/admin/js/collapse.js",
"chars": 1803,
"preview": "/*global gettext*/\n'use strict';\n{\n window.addEventListener('load', function() {\n // Add anchor tag for Show/H"
},
{
"path": "src/staticfiles/admin/js/core.7e257fdf56dc.js",
"chars": 6208,
"preview": "// Core JavaScript helper functions\n'use strict';\n\n// quickElement(tagType, parentReference [, textInChildNode, attribut"
},
{
"path": "src/staticfiles/admin/js/core.js",
"chars": 6208,
"preview": "// Core JavaScript helper functions\n'use strict';\n\n// quickElement(tagType, parentReference [, textInChildNode, attribut"
},
{
"path": "src/staticfiles/admin/js/filters.0e360b7a9f80.js",
"chars": 978,
"preview": "/**\n * Persist changelist filters state (collapsed/expanded).\n */\n'use strict';\n{\n // Init filters.\n let filters ="
},
{
"path": "src/staticfiles/admin/js/filters.js",
"chars": 978,
"preview": "/**\n * Persist changelist filters state (collapsed/expanded).\n */\n'use strict';\n{\n // Init filters.\n let filters ="
},
{
"path": "src/staticfiles/admin/js/inlines.22d4d93c00b4.js",
"chars": 15526,
"preview": "/*global DateTimeShortcuts, SelectFilter*/\n/**\n * Django admin inlines\n *\n * Based on jQuery Formset 1.1\n * @author Stan"
},
{
"path": "src/staticfiles/admin/js/inlines.js",
"chars": 15526,
"preview": "/*global DateTimeShortcuts, SelectFilter*/\n/**\n * Django admin inlines\n *\n * Based on jQuery Formset 1.1\n * @author Stan"
},
{
"path": "src/staticfiles/admin/js/jquery.init.b7781a0897fc.js",
"chars": 347,
"preview": "/*global jQuery:false*/\n'use strict';\n/* Puts the included jQuery into our own namespace using noConflict and passing\n *"
},
{
"path": "src/staticfiles/admin/js/jquery.init.js",
"chars": 347,
"preview": "/*global jQuery:false*/\n'use strict';\n/* Puts the included jQuery into our own namespace using noConflict and passing\n *"
},
{
"path": "src/staticfiles/admin/js/nav_sidebar.3b9190d420b1.js",
"chars": 3063,
"preview": "'use strict';\n{\n const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');\n if (toggleNavSidebar !=="
},
{
"path": "src/staticfiles/admin/js/nav_sidebar.js",
"chars": 3063,
"preview": "'use strict';\n{\n const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');\n if (toggleNavSidebar !=="
},
{
"path": "src/staticfiles/admin/js/popup_response.c6cc78ea5551.js",
"chars": 551,
"preview": "/*global opener */\n'use strict';\n{\n const initData = JSON.parse(document.getElementById('django-admin-popup-response-"
},
{
"path": "src/staticfiles/admin/js/popup_response.js",
"chars": 551,
"preview": "/*global opener */\n'use strict';\n{\n const initData = JSON.parse(document.getElementById('django-admin-popup-response-"
},
{
"path": "src/staticfiles/admin/js/prepopulate.bd2361dfd64d.js",
"chars": 1531,
"preview": "/*global URLify*/\n'use strict';\n{\n const $ = django.jQuery;\n $.fn.prepopulate = function(dependencies, maxLength, "
},
{
"path": "src/staticfiles/admin/js/prepopulate.js",
"chars": 1531,
"preview": "/*global URLify*/\n'use strict';\n{\n const $ = django.jQuery;\n $.fn.prepopulate = function(dependencies, maxLength, "
},
{
"path": "src/staticfiles/admin/js/prepopulate_init.6cac7f3105b8.js",
"chars": 586,
"preview": "'use strict';\n{\n const $ = django.jQuery;\n const fields = $('#django-admin-prepopulated-fields-constants').data('p"
},
{
"path": "src/staticfiles/admin/js/prepopulate_init.js",
"chars": 586,
"preview": "'use strict';\n{\n const $ = django.jQuery;\n const fields = $('#django-admin-prepopulated-fields-constants').data('p"
},
{
"path": "src/staticfiles/admin/js/theme.ab270f56bb9c.js",
"chars": 1943,
"preview": "'use strict';\n{\n window.addEventListener('load', function(e) {\n\n function setTheme(mode) {\n if (mod"
},
{
"path": "src/staticfiles/admin/js/theme.js",
"chars": 1943,
"preview": "'use strict';\n{\n window.addEventListener('load', function(e) {\n\n function setTheme(mode) {\n if (mod"
},
{
"path": "src/staticfiles/admin/js/urlify.ae970a820212.js",
"chars": 7422,
"preview": "/*global XRegExp*/\n'use strict';\n{\n const LATIN_MAP = {\n 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å'"
},
{
"path": "src/staticfiles/admin/js/urlify.js",
"chars": 7422,
"preview": "/*global XRegExp*/\n'use strict';\n{\n const LATIN_MAP = {\n 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å'"
},
{
"path": "src/staticfiles/admin/js/vendor/jquery/LICENSE.de877aa6d744.txt",
"chars": 1097,
"preview": "Copyright OpenJS Foundation and other contributors, https://openjsf.org/\n\nPermission is hereby granted, free of charge, "
},
{
"path": "src/staticfiles/admin/js/vendor/jquery/LICENSE.txt",
"chars": 1097,
"preview": "Copyright OpenJS Foundation and other contributors, https://openjsf.org/\n\nPermission is hereby granted, free of charge, "
},
{
"path": "src/staticfiles/admin/js/vendor/jquery/jquery.12e87d2f3a4c.js",
"chars": 285314,
"preview": "/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n"
},
{
"path": "src/staticfiles/admin/js/vendor/jquery/jquery.js",
"chars": 285314,
"preview": "/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n"
},
{
"path": "src/staticfiles/admin/js/vendor/jquery/jquery.min.2c872dbe60f4.js",
"chars": 87533,
"preview": "/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"ob"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/LICENSE.f94142512c91.md",
"chars": 1124,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors\n\nPermission is hereb"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/LICENSE.md",
"chars": 1124,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors\n\nPermission is hereb"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/af.4f6fcd73488c.js",
"chars": 862,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/af.js",
"chars": 862,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/ar.65aa8e36bf5d.js",
"chars": 769,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/ar.js",
"chars": 769,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/az.270c257daf81.js",
"chars": 698,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/az.js",
"chars": 698,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/bg.39b8be30d4f0.js",
"chars": 821,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/bg.js",
"chars": 821,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/bn.6d42b4dd5665.js",
"chars": 883,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/bn.js",
"chars": 883,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/bs.91624382358e.js",
"chars": 955,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/bs.js",
"chars": 955,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/ca.a166b745933a.js",
"chars": 889,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/ca.js",
"chars": 889,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/cs.4f43e8e7d33a.js",
"chars": 1228,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/cs.js",
"chars": 1228,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/da.766346afe4dd.js",
"chars": 820,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/da.js",
"chars": 820,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/de.8a1c222b0204.js",
"chars": 859,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/de.js",
"chars": 859,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/dsb.56372c92d2f1.js",
"chars": 995,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/dsb.js",
"chars": 995,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/el.27097f071856.js",
"chars": 952,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/el.js",
"chars": 952,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/en.cf932ba09a98.js",
"chars": 840,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/en.js",
"chars": 840,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/es.66dbc2652fb1.js",
"chars": 914,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/es.js",
"chars": 914,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/et.2b96fd98289d.js",
"chars": 793,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/et.js",
"chars": 793,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/eu.adfe5c97b72c.js",
"chars": 864,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/eu.js",
"chars": 864,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/fa.3b5bd1961cfd.js",
"chars": 835,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/fa.js",
"chars": 835,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/fi.614ec42aa9ba.js",
"chars": 789,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
},
{
"path": "src/staticfiles/admin/js/vendor/select2/i18n/fi.js",
"chars": 789,
"preview": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQu"
}
]
// ... and 228 more files (download for full content)
About this extraction
This page contains the full source code of the iwanalabs/django-htmx-components GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 428 files (3.2 MB), approximately 852.4k tokens, and a symbol index with 1210 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.